Tra le sue sfaccettature il php mette a disposizione una serie di funzioni per la manipolazione delle immagini, questo tramite l'utilizzo delle librerie GD.

le GD sono installate in quasi tutti i server ma se stiamo lavorando in locale abbiamo bisogno di installarle vediamo come :


su windows è abbastanza semplice

nel file php.ini decommentiamo questa riga:

da

;extension=php_gd2.dll
a

extension=php_gd2.dll

per usare le GD2.
per le GD1 questa:

;extension=php_gd.dll

Su linux Debian/Ubuntu basta installare il pacchetto “php5-gd”:

sudo apt-get install php5-gd



Adesso vediamo come utilizzare le GD creando un piccolo script che restituisce un immagine con scritto l'ip,l'host e l'user agent della persona che lo visualizza.

come prima cosa dobbiamo inizializzare l'immagine determinando la grandezza (x,y):


$img = imageCreate(200, 200); // X = 200 Y = 200


Bene, la nostra immagine è stata creata, per comodità le GD2 permettono di allocare i colori espressi in RGB in delle varibili, quindi allochiamo 2 colori il bianco che ci servirà per lo sfondo dell'immagine il il nero che ci servirà per le scritte:


$bianco = imageColorAllocate($img, 255, 255, 255);

$nero = imageColorAllocate($img, 0, 0, 0);


Ora è tutto pronto per la creazione dell'immagine, tramite l'array superglobale $_SERVER riprendiamo ip, host e useragent:


$ip = $_SERVER['REMOTE_ADDR'];

$host = $_SERVER['REMOTE_HOST'];

$info = $_SERVER['HTTP_USER_AGENT'];



Esistono diverse funzioni per disegnare, queste sono le principali:


      imageLine($img, $x1, $y1, $x2, $y2, $color) disegna una linea nell'immagine dal punto $x1,$y1 al punto $x2,$y2 di colore $color


      imageRectangle($img, $x1, $y1, $x2, $y2, $color) disegna un rettangolo nell'immagine $img 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.

      

      imageFilledRectangle($img, $x1, $y1, $x2, $y2, $color) funziona in modo analogo alla funzione precedente, solo che disegnerà il riempimento del rettangolo. Se vogliamo quindi queste due funzioni sono complementari.

      

      imageString($img, $font, $x, $y, $text, $color) inserisce all'interno dell'immagine $img il testo $text alle coordinate del punto ($x, $y) utilizzando il font $font e il colore $color. per quanto riguarda i font di default ne sono inclusi 5

      

      imageFill($img, $x, $y, $color) Questo è uno strumento di rempiemento, supponiamo che a $x,$y ci sia un rettangolo questo sarà riempito con $color

Le GD mettono a disposizione anche altre funzioni:


- imageEllipse() disegna un'ellisse
- imageArc() disegna un arco, o un ellisse parziale
- imagePolygon() disegna un poligono indicato dai punti passati come parametro
- imageFilledEllipse() disegna il riempimento di un'ellisse (disponibile solo nelle GD 2.x)
- imageFilledArc() disegna il riempimento di un arco, o ellisse parziale (disponibile solo nelle GD 2.x)
- imageFilledPolygon() disegna il riempimento di un poligono.


Tornando al nostro esempio, per creare un immagine contentente ip,host e useranget ovviamente avreamo bisogno della funzione ImageString() :


imageString($img, 2, 5, 0, "Tuo IP : $ip", $nero);

imageString($img, 2, 5, 50, "Tuo Host : $host", $nero);

imageString($img, 2, 5, 100, "Browser : $info", $nero);

imageString($img, 2, 5, 150, "Galatolo Federico – www.dev-area.org",$nero);


Il nostro script è quasi concluso dobbiamo solo inviare l'header al browser e stampare l'immagine (in questo caso in png ma avremmo anche potuto usare jpg con imageJpg()):


header("Content-type: image/png");

imgePng($img);

imageDestroy($img);


Lo script è concluso potete trovare un esempio QUI