--with-gd=/usr/lib/gd
A questo punto, dato che tutto è stato installato correttamente, passimo alla presentazione delle principali funzioni grafiche.
$img = imagecreate(400, 300);
dove $img non è altro che l'dentificatore dell'immagine, mentre 400 e 300 sono le dimensioni in pixel della figura, rispettivamente largezza ed altezza: due dati di tipo intero (integer). A questo punto possiamo attribuire un colore di sfondo all'immagine con la funzione imagecolorallocate()
$bianco = imagecolorallocate($img, 255, 255, 255);
che richiede come parametri l'identificatore dell'immagine e i valori RGB del colore scelto, ovvero le quantità dei tre colori primari: rosso, verde e blu. Dopo aver creato questa sorta di foglio da disegno possiamo iniziare a dar libero sfogo alla nostra fantasia disegnando alcune fgure. Iniziamo da un cerchio di raggio 100 pixel con il contorno nero. Prima si definisce il colore e poi si disegna:
$nero = imagecolorallocate($img, 0, 0, 0);
imagearc($img, 200, 150, 100, 100, 0, 360, $nero);
Il realtà la funzione imagearc() è stata ideata per tracciare archi. Però, assegnando particolari valori ai parametri, si possono disegnare anche ellissi e cerchi. Oltre al consueto identificatore la funzione richiede nell'ordine i seguenti argomenti: coordinate x e y del centro dell'arco, larghezza ed altezza degli assi dell'arco (può essere cosiderato una ellissi parziale), inizio e fine dell'arco entrambi specificati in gradi sessagesimali, il colore di contorno. Che ne dite se provassimo a riempire il cerchio di nero? Facile, basta usare la funzione imagefill() e passarle le coordinate di un punto interno al cerchio.
imagefill($img, 200, 150, $nero);
Ora possiamo salvare tutto il disegno scrivedo il file cerchio.gif una directory di pubblicazione del server web con quest'ultima funzione
imagegif($img, "/www/prove/cerchio.gif");
Se invece volessimo far apparire l'immagine direttamente su Netscape dovremmo usare, subito all'inizio dello script, una istruzione per inviare una intestazione http al server web e poi la funzione imagegif() senza il secondo parametro. In quest'ultimo caso il programma avrebbe questa forma
<?php Header("Content-type: image/gif"); $img = imagecreate(400, 300); $bianco = imagecolorallocate($img, 255, 255, 255); $nero = imagecolorallocate($img, 0, 0, 0); imagearc($img, 200, 150, 100, 100, 0, 360, $nero); imagefill($img, 200, 150, $nero); imagegif($img); ?> |
<!-- esempio 1 -- > <html> <head> <title>df</title> </head> <body> <table border> <tr> <td>Filesystem</td> <td>Mount point</td> <td>Grafico</td> <td>Legenda</td> </tr> <?php exec("df", $a); $k = 1; while($k < sizeof($a)) { $df = split(" +", $a[$k]); // --- $img = imagecreate(200, 50); $bianco = imagecolorallocate($img, 255, 255, 255); $rosso = imagecolorallocate($img, 255, 0, 0); $blu = imagecolorallocate($img, 0, 0, 255); imagefilledrectangle($img, 0, 0, $df[4]*2, 50, $rosso); imagefilledrectangle($img, $df[4]*2, 0, 100*2, 50, $blu); // --- imagegif($img, "/www/dati/img$k.gif"); echo "<tr>"; echo "<td valign=center>$df[0]</td>"; echo "<td valign=center>$df[5]</td>"; echo "<td valign=center><img src=dati/img$k.gif></td>"; echo "<td valign=center>Spazio totale: $df[1] Kb<br><font color=red>Spazio occupato: $df[2]Kb</font><br><font color=blue>Spazio libero: $df[3] Kb</font></td>"; echo "</tr>"; $k++; } ?> </table> </body> </html> |
angolo in radianti = angolo sessagesimale * pigreco / 180
Bene, ora possiamo calcolare le coordinate $x e $y e disegnae i segmenti. Finalmente otteniamo dei veri settori circolari. Adesso dobbiamo colorare di rosso e di blu i due settori del cerchio utilizzando la funzione imagefill(). Ci servono le coordinate di due punti interni agli spicchi della circonferenza ($xrosso, $yrosso e $xblu, $yblu). Dopo averle calcolate potremo scrivere le due fuzioni per dipingere i due settori generando un vero grafico a torta. Quanto finora detto è tradotto in linguaggio php3 proprio qui sotto
// esempio 2 $img = imagecreate(100, 100); $bianco = imagecolorallocate($img, 255, 255, 255); $rosso = imagecolorallocate($img, 255, 0, 0); $blu = imagecolorallocate($img, 0, 0, 255); $angses = 360 * $df[4] / 100; imagearc($img, 50, 50, 100, 100, 0, $angses, $rosso); imagearc($img, 50, 50, 100, 100, $angses, 360, $blu); $angrad = $angses * M_PI / 180; $x = 50 + 50 * cos($angrad); $y = 50 + 50 * sin($angrad); imageline($img, 50, 50, $x, $y, $rosso); imageline($img, 50, 50, 100, 50, $rosso); $angses -= 2; $angrad = $angses * M_PI / 180; $xrosso = 50 + 48 * cos($angrad); $yrosso = 50 + 48 * sin($angrad); imagefill($img, $xrosso, $yrosso, $rosso); $angses += 4; $angrad = $angses * M_PI / 180; $xblu = 50 + 48 * cos($angrad); $yblu = 50 + 48 * sin($angrad); imagefill($img, $xblu, $yblu, $blu); |