Spesso mi è capitato di lavorare con PHP per creare immagini dinamiche.
Non è proprio un’operazione facilissima. Php mette a disposizione delle librerie grafiche con metodi per la loro manipolazione non proprio facili da gestire, da riconoscere o da memorizzare.
Java, al contrario, quando si tratta di grafica, è molto più abbordabile, sia come manipolazione sia come interfaccia di gestione. Infatti, con la classe Graphics permette di creare figure geometriche di base, di colorarle.
Ho quindi cercato di portare questa facilità di gestione all’interno di PHP con alcune classi (ancora nelle loro versioni iniziali) che invece risultano molto più immediate da gestire.
- Color
- Graphics
- Dimension
Color
Questa classe permette di memorizzare le informazioni sul colore RGB.
$colore = new Color(0, 0, 0);
In questo modo viene creato un nuovo colore, le cui caratteristiche corrispondono esattamente a quello che comunemente sarebbe il nero.
Il tutto viene memorizzato nella variabile $colore.
Nel caso in cui possa essere utile capire quali sono le intensità di luminosità sui vari canali (quando ad esempio non sappiamo che colore è memorizzato in questa variabile), è possibile accedere a queste informazioni con un codice simile a questo:
$rosso = $colore->getRed(); $verde = $colore->getGreen(); $blue = $color->getBlue(); print $rosso." ".$verde." ".$blu;
Dimension
Questa classe definisce le informazioni riguardanti la dimensione di un oggetto.
Può essere utile per memorizzare base e altezza del bounding box di una figura geometrica all’interno di un’unica variabile.
$dim = new Dimension(100, 100); print "larghezza: ".$dim->getWidth().", altezza: ".$dim->getHeight();
Graphics
Necessita delle due classi precedenti per funzionare.
Contiene vari metodi per la creazione di figure geometriche elementari come:
- drawRect(x, y, width. height)
- fillRect(x, y, width, height);
- drawOval(x, y, width, height);
- fillOval(x, y, width. height);
- drawLine(x1, y1, x2, y2);
Sono metodi abbastanza intuitivi riguardo il loro utilizzo. Un esempio più esplicativo può essere questo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $g = new Graphics(500, 200); $g->setColor(new Color(0, 0, 255)); $g->fillRect(0, 0, $g->getWidth(), $g->getHeight()); $g->setColor(new Color(255, 0, 0)); $g->fillOval(0, 0, $g->getWidth(), $g->getHeight()); $g->setColor(new Color(100, 0, 0)); $g->fillOval(20, 20, $g->getWidth()-40, $g->getHeight()-40); $g->setColor(new Color(0, 255, 0)); $g->fillRect($g->getWidth()/2-10, $g->getHeight()/2-10, 20, 20); $g->setColor(new Color(0, 0, 0)); $g->drawLine(0, 0, $g->getWidth(), $g->getHeight()); $g->drawLine($g->getWidth(), 0, 0, $g->getHeight()); $g->renderImage("prova", "png"); |
L’immagine renderizzata verrà memorizzata nella stessa cartella di esecuzione del codice. Per ora la funzione accetta due stringhe separate con il nome del file e con l’estensione. Successivamente si eliminerà questo handicap consentendo l’utilizzo di una sola stringa.
L’immagine renderizzata da questo codice è questa:

