Volevo postare questo tutorial su PHP che ho realizzato qualche tempo fa sulle famose GD dato che ho potuto capire che molti, soprattutto alle prime armi, hanno difficoltà ad usare questa libreria. Il tutorial è scritto da me con l'aiuto del mio amicoo Crash-overflow per gli esempi mani
Buona lettura, aspetto commenti Wink
Disegnare con le GD
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, "Gaglio – 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
PS: Scusate ma non ho molta confidenza con la formattazione nel phpBB :S per una migliore formattazione vi allego il link dove è ufficialmente postato
http://dev-area.org/jos/index.php?optio ... &Itemid=27
Ciao, Gaglio

