Creare un rettangolo con PHPe GD
PHP e GD, l'estensione grafica di PHP, consentono di creare immagini con figure geometriche semplici come dei rettangoli. Vediamo il codice necessario a realizzare un rettangolo con al centro una frase:
header ("Content-type: image/png");
$handle = imagecreate (200, 50) or die ("Impossibile creare l'immagine");
$backgroundColor = imagecolorallocate($handle, 255, 255, 0);
$textColor = imagecolorallocate($handle, 0, 0, 0);
imagestring($handle, 10, 31, 18, "Ciao da html.it", $textColor);
imagepng($handle);
Provando ad eseguire tale codice il risultato che otterremo sarà quello rappresentato nella figura seguente:
Analizziamo ora, riga per riga, il codice che abbiamo scritto. La prima riga ci consente di modificare il Content Type
della risposta affinché il browser sappia che deve interpretare il file come un'immagine e non un file HTML. Se commentassimo quella riga otterremo come risultato una serie di caratteri senza significato.
La funzione imagecreate()
prende in ingresso le dimensioni dell'immagine che vogliamo creare: la lunghezza come primo parametro, la larghezza come secondo. Restituisce una risorsa di tipo immagine su cui andremo a compiere le successive operazioni.
imagecolorallocate()
, invece, alloca un colore per l'immagine. La funzione prende in ingresso una risorsa di tipo immagine e i valori di rosso, verde e blue che creano il colore. Nel nostro caso, infatti, abbiamo chiesto di allocare il colore giallo (in RGB equivale a R=255, G=255, B=0) allo sfondo dell'immagine.
A questo punto possiamo occuparci della scritta utilizzando nuovamente la stessa funzione e salvando su una nuova risorsa ($textColor
) il colore allocato. In questo caso abbiamo scelto il nero.
Attraverso la funzione imagestring()
possiamo disegnare una stringa all'interno dell'immagine.
imagestring($handle, 10, 31, 18, "Ciao da html.it", $textColor);
Essa prende in ingresso i seguenti parametri:
- Una risorsa di tipo immagine.
- La dimensione per il font, di default i valori consentiti vanno da 1 a 5.
- Posizione sull'asse delle X a partire dall'angolo in alto a sinistra.
- Posizione sull'asse delle Y a partire dall'angolo in alto a sinistra.
- La stringa da disegnare.
- L'identificativo del colore con cui disegnare la stringa.
Oltre a disegnare stringhe possiamo creare anche linee con imageline()
, ellissi con imageellipse()
o archi o cerchi con imagefilledarc()
.
Ora che abbiamo completato le operazioni sull'immagine da disegnare possiamo stampare a schermo il risultato attraverso la funzione imagepng()
. Essa prende in ingresso la risorsa e, opzionalmente, un path o uno stream su cui salvare il risultato. Allo stesso modo possiamo decidere di creare un'immagine di tipo gif, bmp, jpeg e così via. È sufficiente modificare il nome della funzione.
Ritagliare una porzione di immagine con PHP
Oltre che creare immagini da zero possiamo anche caricarne di esistenti ed eseguire operazioni su di esse. Un caso d'uso frequente è quello di "croppare" un'immagine, ovvero ritargliarne una parte:
header ("Content-type: image/png");
$handle = imagecreatefrompng('image.png');
$size = min(imagesx($handle), imagesy($handle));
$imageCropped = imagecrop($handle, [
'x' => 0,
'y' => 0,
'width' => $size,
'height' => $size
]);
imagepng($imageCropped);
Anche in questo caso la prima operazione che compiamo è quella di dire a PHP che restituiremo un'immagine con header ("Content-type: image/png");
.
A questo punto creiamo una risorsa di tipo immagine partendo da un'immagine esistente con imagecreatefrompng()
. La funzione prende in ingresso il path di un'immagine di tipo PNG; nel caso in cui l'estensione del file sia di tipo diverso possiamo usare imagecreatefromjpeg()
, imagecreatefromgif()
e così via.
Nel nostro caso abbiamo deciso di ritagliare un quadrato dell'immagine. La dimensione del lato quadrato è data dal lato più piccolo dell'immagine. L'altezza e la larghezza possono essere recuperate rispettivamente con le funzioni imagesy()
e imagesx()
. Entrambe prendono in ingresso una risorsa di tipo immagine e restituiscono un intero. Con la funzione min()
prendiamo il valore minimo tra i due.
Ora possiamo creare una risorsa che conterrà la porzione di immagine ritagliata. Per raggiungere l'obiettivo utilizziamo la funzione imagecrop()
che prende in ingresso i seguenti parametri:
- Una risorsa.
- L'array contenente:
x
: la posizione di partenza sull'asse delle X a partire dall'angolo in alto a sinistra.y
: la posizione di partenza sull'asse delle Y a partire dall'angolo in alto a sinistra.width
: la larghezza.height
: la lunghezza.
La funzione restituisce una nuova risorsa che possiamo restituire, come per l'esempio precedente, con imagepng()
.
Il risultato che otterremo è il seguente. La prima immagine è quella di partenza, la seconda indica la porzione di immagine che verrà restituita: