Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    aiuto nel capire pezzi di php...

    ciao a tutti, ho trovato su internet una classe in php di libero utilizzo che dovrebbe servire a calcolare le dimensioni in pixel di un'immagine in input (dovrebbe calcolare anche altro, ma a me interessa la dimensione in pixel.)
    solo che non riesco bene a capirla, e vorrei chiedere un aiuto a voi se possibile
    ecco qui la classe immagineinfoClass.php:

    codice:
    <?php
    class immagineInfo
    {
     var $_width;
     var $_height;
     var $_path;
     var $_size;
     var $_formato;
    
    function immagineInfo($path)
    {
       $this->_width=0;
       $this->_height=0;
       $this->_formato="";
       $this->_path=$path;
       $this->_size=filesize($path);
       $this->setInfo();
    }
    //interfaccia-------------------------------------------------------------------
    function getWidth()
    {
             return $this->_width;
    }
    function getHeight()
    {
             return $this->_height;
    }
    function getSize()
    {
             return $this->_size;
    }
    function getFormato()
    {
             return $this->_formato;
    }
    //------------------------------------------------------------------------------
    //Ricava dai file ASCII i bytes da leggere per le dimensioni
    function readBytes($offset, $numBytes)
    {
          $fd=fopen($this->_path, "r") or die ("Impossibile aprire il file $directory/$entryDir/$entryFile");
    
    
           if($offset > 0)
           {
            $buffer = fread($fd, $offset-1);
            //print "
    (Debug)Buffer dentro readBytes:".$buffer;
           }
           if($numBytes== -1)
    
              return fread($fd, $this->_size);
           else
               return fread($fd, $numBytes);
    }
    
    
    //Converte valori esadecimali in numeri interi decimali
    function decConvert($str, $mode)
    {
     if($mode==1)        //Dall'inizio          //Dalla fine
     return (integer)(ord(substr($str,0,1))+ (ord(substr($str,-1))*256));
     else if($mode==2)        //Dalla fine          //Dall'inizio
     return (integer)(ord(substr($str,-1))+ (ord(substr($str,0,1))*256));
    }
    //Setta le dimensioni di altezza e larghezza del file grafico
    function setInfo()
    {
     $path=strtoupper($this->_path);
     $formato=substr($path,-3);
     $this->_formato=$formato;
     switch($formato)
     {
       case "GIF":
            $this->_width= $this->decConvert($this->readBytes(7, 2), 1);
            $this->_height= $this->decConvert($this->readBytes(9, 2), 1);
       break;
    
       case "BMP":
            $this->_width=$this->decConvert($this->readBytes(19, 2), 1);
            $this->_height=$this->decConvert($this->readBytes(23, 2), 1);
       break;
       case "PNG":
            $this->_width=$this->decConvert($this->readBytes(19, 2), 2);
            $this->_height=$this->decConvert($this->readBytes(23, 2), 2);
       break;
    
       case "JPG":
            $buffer=$this->readBytes(0, -1);
            //print "
    (debug)Buffer:".$buffer;
            $fileSize = strlen($buffer);
            $target = chr(255).chr(216).chr(255);
            $targetFound = (integer)strpos($buffer, $target)+1;
            if($targetFound>0)
            {
             $pos = $targetFound + 2;
             $endLoop = False;
    
             while($endLoop == False && $pos < $this->_size )
             {
               while(ord(substr($buffer,$pos,1))==255 and $pos < $this->_size)
               {
                $pos=$pos+1;
               }
               if(ord(substr($buffer,$pos,1))<192 or ord(substr($buffer,$pos,1))>195)
               {
                $markerSize = $this->decConvert(substr($buffer,$pos+1,2),2);
                $pos = $pos + $markerSize + 1;
               }
               else
                  $endLoop = True;
             }
            }
            $this->_width=$this->decConvert(substr($buffer, $pos + 6, 2), 2);
            $this->_height=$this->decConvert(substr($buffer, $pos + 4, 2), 2);
    
       break;
     }
    }
    
    }
    
    //Uso della classe--------------------------------------------------------------
    $immagineInfo[0]= new immagineInfo("prova.gif");
    $immagineInfo[1]= new immagineInfo("prova.bmp");
    $immagineInfo[2]= new immagineInfo("prova.png");
    $immagineInfo[3]= new immagineInfo("prova.jpg");
    
    for($i=0; $i< sizeof($immagineInfo);$i=$i+1)
    {
              print "
    ImmagineInfo".$i.":&nbsp";
              print $immagineInfo[$i]->getWidth();
              print "x";
              print $immagineInfo[$i]->getHeight();
              print "\t";
              print $immagineInfo[$i]->getSize();
              print "bytes\t";
              print $immagineInfo[$i]->getFormato();
              print "
    ";
    }
    ?>
    ora, l'uso della classe in se mi è chiaro, (è ben spiegato in fondo al file) i miei dubbi sono più su alcuni simboli/definizioni usate nel codice che non riesco a capire, e non ho trovato le spiegazioni nemmeno nelle guide php sulla sezione guide di html.it. probabilmente sono banalissime, ma non riesco a capirle senza un aiuto
    la variabile $this che cos'è di preciso?
    e il simbolo -> a cosa serve? in altri spezzoni di codice ho notato anche il simbolo =>, ha la stessa funzione? per ora mi saltano all'occhio solo queste, non l'ho "analizzato" a fondo .
    scusate se son domande banali ma non trovo risposta, ho anche cercato sul forum ma quei simboli nemmeno me li fa cercare

    ultima cosa... ho cercato molto per calcolare le dimensioni in pixel dei file, ma ho trovato solo questa classe. se ci sono metodi magari più semplici per calcolarle, sono bene accetti

    grazie a tutti, Alex.

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Parto subito con l'ultima domanda :P
    Se ti serve solo la dimensione dell'immagine, puoi benissimo evitare l'uso della classe usando una sola funzioncina: getimagesize().

    Esempio d'uso:

    Codice PHP:
    $dimensione getimagesize('prova.gif');

    echo 
    $dimensione['width']; // Visualizza la larghezza in pixel
    echo $dimensione['height']; // Qui invece visualizza l'altezza 
    Molto più facile ed efficiente :)

    Per maggiori informazioni su questa funzione e sui valori che restituisce, vedi qui: http://www.php.net/manual/it/function.getimagesize.php


    Veniamo ora ai tuoi quesiti. Sarò breve ma indicherò anche le sezioni della documentazione di PHP in cui vengono trattati gli argomenti su cui hai dubbi.

    $this è una pseudo variabile utilizzabile all'interno di una classe; fa riferimento all'istanza della classe in cui lo script sta lavorando. Immagina l'istanza di una classe come una nuova scatola; se ti trovi all'interno di questa ipotetico contenitore, come puoi riferirti ad un'altra cosa che sia contenuta in esso? Con $this, appunto.

    L'operatore -> serve per accedere a un elemento presente nell'istanza di una classe. Alla sua sinistra va specificato, per così dire, il contenitore, mentre a destra si indica il contenuto a cui si desidera accedere. Esempi:

    Codice PHP:
    $this->var;  // recupera il valore della proprietà "var" presente nella classe attuale

    $istanzaClasse = new provaClasse;
    $istanzaClasse->open();  // lancia il metodo open() definito nella classe istanziata in precedenza dentro alla variabile $istanzaClasse. 
    e così via.

    Per capire meglio il funzionamento di $this e dell'operatore ->, leggi questa pagina: http://www.php.net/manual/it/language.oop5.basic.php

    Infine, l'operatore => non ha nulla a che vedere con il precedente ->. Serve per assegnare un valore ad una specifica chiave di un vettore, nel momento in cui quest'ultimo viene creato con la funzione array(). E' quindi necessario capire bene cos'è un array (chiamato anche, appunto, vettore). Se ne hai bisogno, qui c'è molto materiale sui vettori: http://www.php.net/manual/it/language.types.array.php

    Esempio:

    Codice PHP:
    $vettore = array( 'chiave1' => 'valore1''chiave2' => 'valore2'); // Uso di =>

    // Non va usato per assegnare un valore ad un array già creato! In tal caso si usa l'assegnazione con il simbolo =

    $vettore['chiave3'] = 'valore3'
    => può essere usato anche all'interno di un ciclo foreach; siamo sempre nell'ambito degli array ma in questo caso non si parla di assegnazione tramite la funzione array(). Non mi dilungo su questo, ti rimando alla pagina in cui è spiegato l'iteratore foreach: http://www.php.net/manual/it/control...es.foreach.php

    Ciao ciao!
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    perfetto!
    cosa chiedere di più
    in effetti adesso che ci ripenso l'operatore => era spiegato su html.it nelle guide php proprio nella sezione sugli array, mentre $this e -> non li avevo trovati.
    grazie ancora

  4. #4
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Di niente!
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.