Il PHP offre anche la possibilità di gestire le immagini, come ad esempio sapere la dimensione di un'immagine JPEG, GIF, PNG, SWF, TIFF e JPEG2000, attraverso l'uso di funzioni specifiche; inoltre, se avete installato le librerie GD ( scaricabili su http://www.boutell.com/gd/ ) sarete anche in grado di creare immagini al volo e di modificarle.
Di seguito sono riportate tutte le funzione di php relative alla gestione di immagini, che non richiedono l'installazione della libreria GD:
| Funzione | Esempio | Descrizione |
| getimagesize | print_r(getimagesize("img.jpg")); | Tale funzione serve per ottenere un array contenente tutte le informazioni relativa all'immagine (di qualsiasi estensione, GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM, o WBM) passata come parametro, tra cui la larghezza, altezza, formato immagine (MIME TYPE). L'output sarà: Array ( [0] => 337 [1] => 500 [2] => 2 [3] => width="337" height="500" [bits] => 8 [channels] => 3 [mime] => image/jpeg ) |
Per installare la libreria GD su Windows (per l'installazione su Linux/Unix leggere la guida ufficiale), basta aprire il file di configurazione php.ini, andare alla linea 550 ed eliminare il ";" davanti all'estensione gd2 (extension = php_gd2.dll). In questo modo, riavviando Apache, il vostro server web dovrebbe essere in grado di interpretare il codice php rerlativo alle librerie GD.
Notare come sia stata decommentata la libreria GD2 e non la GD, poichè la prima dll è già presente nel pacchetto di php 4 e superiori, mentre la seconda no.
Per avere una ulteriore conferma dell'avvenuta installazione, basta eseguire lo script phpinfo() e cercare la voce GD, e vedere se le relative voci a GIF, JPG e PNG sono marcate come "enabled":

Vediamo ora le principali funzioni ed esempi di questa libreria:
| Funzione | Sintassi | Descrizione |
| imgcreate | imageCreate($x, $y) | Prende solo due parametri, le dimensioni x e y dell'immagine espresse in pixel. Con essa è possibile usare solo 256 tonalità di colore diverse, inoltre non è possibile utilizzare il canale Alpha (la trasparenza). Quando si cercherà di allocare un nuovo colore in realtà si allocherà un colore il più vicino possibile a quello desiderato, ma non esattamente quello voluto! Con questa funzione, il primo colore allocato sarà anche il colore di sfondo dell'immagine. |
| imageCreateTrueColor | imageCreateTrueColor($x, $y) | Il funzionamento è analogo a quello di imageCreate() solo che con questa funzione è possibile utilizzare tutte le tonalità dello standard RGB, vale a dire 16.581.375 colori! Questa funzione è stata introdotta nelle GD 2.0 quindi non è possibile utilizzarla con versioni precedenti. Con questa funzione è possibile utilizzare colori dotati anche dell'alpha channel. C'è anche un'altra differenza rispetto ad imageCreate(), vale a dire che il colore di sfondo qui è sempre nero. |
| imagecolorallocate | imageColorAllocate($imageRef, $red, $blue, $green) | Questa funzione alloca nella palette dell'immagine $imageRef il colore RGB espresso dalla combinazione dei 3 colori fondamentali (rosso, verde, blu) e ne restituisce l'indice. Nota: i colori possono essere espressi da un numero compreso tra 0 e 255, valori fuori da questo range genereranno un errore |
| imagearc | imagearc($imageRef, $cx, $cy, $w, $h, $s, $e, $color) | Disegna una ellisse / cerchio di centro ($cx,$cy), di larghezza $w ed altezza $h; il punto di partenza nel disegnare l'ellisse, di colore $color, è rappresentato dai gradi $s e $e. Un esempio è mostrato qui. |
| imageRectangle | imageRectangle ($imageRef, $x1, $y1, $x2, $y2, $color) | Disegna un rettangolo nell'immagine $imageRef partendo da due punti, il vertice superiore sinistro ($x1, $y1) e il vertice inferiore destro ($x2, $y2) del rettangolo con il colore $color. Questa funzione disegnerà solo il bordo del rettangolo lasciandone vuoto il contenuto. Il bordo di questo rettangolo sarà di 1 px. Un esempio è mostrato qui. N.B.: ricordatevi che le due coordinate che specificate devono sempre rientrare in quelle di imagecreate. |
| imagechar | imagechar($imageRef, $font, $x, $y, $string, $color) | Disegna la prima lettera di una stringa, $string, del colore $color, del font specificato ($font è un intero da 1 a 5) e la posiziona alle coordinate $x e $y. Un esempio è mostrato qui. |
| imagecharup | imagecharup($imageRef, $font, $x, $y, $string, $color) | Uguale al precedente, solo che disegna la lettera verticalmente. Un esempio è mostrato qui. |
| imagefill | imageFill($imageRef, $x, $y, $color) | Questa funzione corrisponde al secchiello del software Paint di Windows; facendo click nel punto ($x, $y) riempiremo del colore $color la porzione di immagine che racchiude quel punto. Un esempio è mostrato qui. |
| imagefilledpolygon | imagefilledpolygon($imageRef, $array_points, $num_points, $color) | Crea un poligono ripieno del colore $color nell'immagine specificata. Le coordinate dei vertici vengono specificati nell'array $array_points, mentre il numero dei vertici in $num_points (ie. point[0] = x0, point[1] = y0, point[2] = x1, point[3] = y1, ...); per cui per un poligono di 6 vertici, l'array avrà una dimensione di 12 (2 coordinate per vertice). Un esempio è mostrato qui. |
| imagefilledrectangle | imageFilledRectangle ($imageRef, $x1, $y1, $x2, $y2, $color) | Funziona in modo analogo alla funzione imageRectangle, solo che disegnerà il riempimento del rettangolo. Esempi sono mostrati qui e qui. |
| imageline | imageLine($imageRef, $x1, $y1, $x2, $y2, $color) | Disegna una linea nell'immagine $imageRef unendo i punti ($x1, $y1) e ($x2, $y2) di colore $color; un esempio è mostrato qui. |
| imagestring | imageString( $imageRef, $font, $x, $y, $text, $color) | Inserisce all'interno dell'immagine $imageRef il testo $text alle coordinate del punto ($x, $y) utilizzando il font $font e il colore $color. Per quanto riguarda il font bisogna citare il fatto che sono messi a disposizione 5 font inclusi nelle librerie, è quindi possibile specificare un numero intero compreso tra 1 e 5 per usare quelli interni, oppure specificare il path di un font residente sul disco del server. Un esempio è mostrato qui. |
| imagestringup | imageStringUp( $imageRef, $font, $x, $y, $text, $color) | Uguale al precedente solo che la stringa è scritta verticalmente. |
| imagecopyresized | imageCopyResized($imgDest, $imgSource, $destX, $destY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH) | La classica funzione tanto usata per creare le thumbnail. Copia il rettangolo dell'immagine $imgSource che ha come vertice superiore sinistro il punto ($srcX, $srcY) ha come larghezza $srcW e altezza $srcH nell'immagine $imageDest, più precisamente nella porzione delimitata dal rettangolo avente come vertice superiore sinistro il punto ($destX, $destY), ha come altezza $destH e larghezza $destW. |
| header | header("Content-type: image/png") header("Content-type: image/jpeg") header("Content-type: image/gif") |
Le operazioni per l'invio in output sono molto semplici, tuttavia è necessario cambiare il tipo MIME del file PHP, per impostazione predefinita infatti è su text/html, noi dobbiamo portarlo sul tipo della nostra immagine. Per fare questo ci serviamo della funzione header() (serve quindi per specificare il tipo di output). Prima del richiamo della funzione di output è bene quindi utilizzare questa funzione nel modo specificato affianco. |
| imagepng | imagePng($imageRef) | Invia in output l'immagine $imageRef nel formato PNG. |
| imagegif | imageGif($imageRef[, $path]) | Invia in output l'immagine $imageRef come GIF, se si utilizza anche il secondo parametro, l'immagine sarà salvata e non inviata in output. Questa funzione, come tutte le funzioni collegate alle GIF, non è disponibile se si utilizza una versione 2.x delle GD. |
| imagejpeg | imageJpeg($imageRef [, $path [, $qualità]]) | Specificando solo il primo parametro invia in output l'immagine $imageRef in formato JPEG, specificando anche il secondo l'immagine non verrà inviata in output ma salvata con il nome indicato in $path, il terzo parametro, sempre opzionale, ne definisce la qualità, si può inserire un valore compreso tra 0 (immagine scadente) e 100 (immagine ottimale). Se omesso viene usato 75 come valore predefinito. La qualità dell'immagine influirà ovviamente sulle dimensioni finali del file. |
| imgdestroy | imageDestroy($imageRef) | È possibile eliminare l'immagine dalla memoria prima che lo script sia terminato utilizzandola. L'utilizzo di questa funzione è superfluo se l'output dell'immagine è l'ultima operazione dello script in quanto l'interprete libererà automaticamente la memoria impiegata dal programma. |
Abbiamo visto le principali funzioni GD per le immagini e stringhe di caratteri; vediamo ora il codice da usare ogni volta che si vuole mandare ad output una immagine (questo è il codice usato negli esempi delle funzioni elencate sopra):
|
<?php // 1) crea una immagine 200*200 $img = imagecreate(200, 200); // 2) alloca qualche colore: crea uno sfondo quadrato bianco $white = imagecolorallocate($img, 255, 255, 255); // 3) setta ora il colore da usare per il cerchio $white = imagecolorallocate($img, 255, 0, 0); // 4) disegna un cerchio rosso imagearc($img, 100, 100, 150, 150, 0, 360, $white); // 5) output dell'immagine nel browser header("Content-type: image/png"); imagepng($img); ?> |
Riporto anche il codice per la creazione di Thumbnails a partire da immagini specificate:
|
<?php $img = "img.jpeg"; // percorso al file dell'immagine $dest = "miniature/"; // directory di salvataggio delle miniature create // dimensioni della miniatura da creare <BR> $thumbWidth = 60; // larghezza $thumbHeight = 60; // altezza // livello di compressione della miniatura $thumbComp = 90; // creazione dell'immagine della miniatura $thumb = imagecreate($thumbWidth, $thumbHeight) or die("Impossibile creare la miniatura"); // apertura dell'immagine originale $src = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale"); // copio l'immagine originale in quella della miniatura ridimensionandola imagecopyresized($thumb, $src, 0, 0, 0, 0, $thumbWidth, $thumbHeight, imageSx($src), imageSy($src)) or die("Impossibile ridimensionare l'immagine"); // salvataggio miniatura imagejpeg($thumb, $dest, $thumbComp) or die("Impossibile salvare la miniatura"); ?> |