 Disegnare con le GD
Pubblicato il 13/06/2008
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
A proposito dell'autore
Conosco il Visual Basic 6, JAVA, PHP, (X)HTML ,C ,C++ un po di JavaScript, sono appassionato di GUN/Linux di conseguenza conosco Bash scripting, Python e Perl,sono abbastanza abbastanza esperto nella costruzione e configurazione di server LAMP (Linux Apache Mysql Php/Perl/Python)
Faccio parte di G@W (Guru At Work) un associazione nata per combattere l'analfabetismo informatico
|
Aggiungi un commento