Attendi ...

Produzione di immagini in PHP con la libreria GD

Sin dalla versione PHP 4.3 il supporto alla libreria GD è incluso tra i moduli di default di PHP. La storia della libreria è piuttosto controversa, perché nel passaggio dalle versioni 1.x alle 2.x è stato prima implementata, poi rimossa e infine ripristinata la gestione del formato GIF. Con PHP 5.x e la libreria GD 2.x (in breve GD2) le cose si sono finalmente assestate, ed è possibile sfruttare il modulo GD in modo semplice e flessibile, gestendo diversi formati di immagini, tra cui i più diffusi sul web: JPEG, GIF e PNG. In aggiunta alla libreria GD abbiamo a disposizione anche l'estensione exif, che permette di leggere e trattare i metadati contenuti nei formati JPEG e TIFF, utile soprattutto se dobbiamo sviluppare software in ambito fotografico professionale.

Le funzionalità più utili, negli scenari comuni, sono proprio le operazioni di base della libreria GD: iniziamo a vedere come utilizzarla, creando un'immagine di prova.

Configurazione e run-time

La libreria GD2 dovrebbe essere attiva per default, ma se vogliamo esserne sicuri controlliamo che la riga

extension=php_gd2.dll

non sia commentata nel nostro file php.ini. Finché lavoriamo in locale, o nell'ambiente di test, la configurazione runtime di PHP dovrebbe andare più che bene. Quando passiamo in produzione, è necessario disabilitare gli avvisi di errore, specificando

gd.jpeg_ignore_warning = 1

display_errors = Off

La scelta di “spegnere” la visualizzazione degli errori non è solo un fatto estetico, ma funzionale. Se qualcosa va storto durante le gestione di un'immagine, il modulo GD produce un messaggio d'errore a sua volta sotto forma di immagine, che è piuttosto difficile da riconoscere (i.e. leggere) lato codice: meglio evitare il problema a monte, disabilitando l'output dei messaggi d'errore.

Se vogliamo invece controllare la configurazione della libreria, abbiamo a disposizione un comando simile al famoso phpinfo(), che stampa a video versione e impostazioni del modulo GD

var_dump(gd_info());

Creazione di immagini

Un uso tipico della libreria GD è la produzione dinamica di immagini, che avranno un proprio URI, e saranno in tutto per tutto simili alle immagini “fisiche” raggiungibili attraverso un link HTML. Immagini di questo tipo, nel protocollo HTTP, vengono restituite specificando nell'header della risposta il Content-Type con valore image/png: Vediamo un esempio

$im = imagecreatetruecolor(200, 100) ;

$blue = imagecolorallocate($im, 0, 0, 255) ;

$white = imagecolorallocate($im, 255, 255, 255) ;

il codice qui sopra produce un'immagine, il cui riferimento è memorizzato nella variabile $im, e associa due colori all'immagine (blu e bianco). A questo punto possiamo riempire l'immagine con un rettangolo, per creare un effetto simile al padding, e poi scrivere un messaggio sull'immagine stessa

imagefilledrectangle($im, 10, 10, 190, 90, $white) ;

imagestring($im, 2, 20, 20, 'Hello World!', $blue) ;

il risultato sarà qualcosa del tipo

Immagine campione

Immagine campione

Ma come far comparire l'immagine appena creata? L'immagine è pronta all'uso, ma il codice visto finora ha creato l'immagine solamente come oggetto in memoria, riferito dalla variabile $im. Quello che manca, è la sezione che si occupa di renderizzare l'immagine, ovvero inviarla al browser.

Se vogliamo produrre un'immagine vera e propria, come detto sopra, basterà scrivere

header('Content-Type: image/png') ;

imagepng($im) ;

Che visualizza nel browser l'immagine, creando di fatto un URI (l'indirizzo della pagina PHP) del tutto simile all'URI di una qualsiasi immagine raggiungibile via HTTP. Qui sopra abbiamo usato la funzione imagepng per produrre l'immagine in formato PNG, ma chiaramente abbiamo a disposizione anche le funzioni imagegif e imagejpeg per gli altri formati. Se invece vogliamo creare l'immagine nel file system, producendo un nuovo file, scriviamo

imagepng($im, 'foo.png') ;

che salva l'immagine nel file foo.png. Anche in questo caso possiamo salvare l'immagine in altri formati, come visto sopra. Alla fine del lavoro, prima di lasciare la pagina, se non ci serve più la variabile $im è bene dire a PHP di distruggerne l'impronta in memoria

imagedestroy($im) ;

per liberare risorse e ottimizzare le prestazioni.

Pubblicato il Aggiornato il

Ti potrebbero interessare

WP2Shell: quando aggiornamenti, WAF e hardening non bastano

Aggiornamenti, WAF, backup e Disaster Recovery: tutti i livelli della resilienza WordPress

Una vulnerabilità critica nel core di WordPress ha riportato l'attenzione su un principio spesso trascurato: proteggere un sistema non significa poter garantire che non verrà mai compromesso.

La vulnerabilità nota come WP2Shell nasce dalla combinazione di due problemi di sicurezza, identificati come ...

21.07.2026
Dettagli

Hosting Condiviso VPS Cloud WordPress

Hosting condiviso, VPS o Cloud: quando WordPress deve crescere

Un sito WordPress può iniziare la propria attività su un normale piano di hosting condiviso e funzionare correttamente per molto tempo. Con l'aumento del traffico, dei contenuti, dei plugin o delle funzionalità, però, le esigenze tecniche possono cambiare.

Un sito aziendale che inizialmente pubblicava poche pagine può diventare un portale ricco di ...

13.07.2026
Dettagli

Come proteggere WordPress da attacchi automatici

Proteggere WordPress dagli attacchi automatici: perché è importante

WordPress è una delle piattaforme più utilizzate al mondo per realizzare siti web, blog aziendali ed eCommerce. Proprio per questa diffusione, è anche uno dei bersagli più frequenti di bot automatici, tentativi di login, scansioni alla ricerca di vulnerabilità, malware e attacchi contro plugin non aggiornati.

Molti attacchi non sono mirati ...

06.07.2026
Dettagli