Naturalmente, nel nostro discorso riguardante l'utilizzo delle librerie grafiche GD in PHP, non poteva mancare un accenno ad uno degli argomenti più richiesti in materia, cioè la creazione di thumbnails, miniature d'immagini utilizzatissime nella gestione delle gallery.
A questo scopo proporremo uno script il cui compito è proprio quello di creare delle immagini più piccole partendo da un'originale:
<? $larghezza_thumb = 100; $altezza_thumb = 100; $originale = 'img.jpeg'; $immagine = imagecreatefromjpeg($originale); $larghezza = imagesx($immagine); $altezza = imagesy($immagine); $scala = min($larghezza_thumb/$larghezza, $altezza_thumb/$altezza); if ($scala < 1) { $nuova_larghezza = floor($scala*$larghezza); $nuova_altezza = floor($scala*$altezza); $immagine_temporanea = imagecreatetruecolor($nuova_larghezza, $nuova_altezza); imagecopyresized($immagine_temporanea, $immagine,0,0,0,0, $nuova_larghezza, $nuova_altezza, $larghezza, $altezza); imagedestroy($immagine); $immagine = $immagine_temporanea; } header("Content-type: image/jpeg"); imagejpeg($immagine); ?>
L'immagine risultante dal trattamento sarà un output in scala 1 a n rispetto all'originale con altezza e larghezza massime pari a 100 px.
Partendo da un'originale in formato "JPEG", abbiamo creato un file grafico temporaneo del quale si sono calcolate le dimensioni sulla base di ascisse e ordinate (imagesx(), asse delle x, quindi larghezza e imagesy(), asse delle y, quindi altezza).
La scala è stata definita tenendo conto dei valori massimi stabiliti, per cui l'altezza e la larghezza delle thumbnails sono state prima calcolate passandole come argomenti alla funzione min() per poi venire arrotondate da floor(). La prima funzione
restituisce il valore numericamente più piccolo tra gli argomenti dati come parametro, floor() invece
arrotonda una frazione all'intero inferiore, cioè per difetto.
A questo punto, è stato effettivamente creato il file tempoarneo di miniatura, allocando i colori dell'originale con imagecreatetruecolor() e assegnando al thumb le nuove dimensioni.
imagecopyresized(), che copia e ridimensiona un'immagine passata come argomento, ha accettato come parametri tutti i dati calcolati e raccolti nelle fasi precedenti, a questo punto l'immagine temporanea è stata distrutta (imagedestroy()) e una volta specificato l'header del formato immagine (Content-type: image/jpeg), abbiamo potuto visualizzare l'output desiderato.
Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a Mrwebmaster.it; ne è vietata la riproduzione,
anche parziale, senza l'esplicito consenso dell'autore e della redazione di Mrwebmaster.it.