In questo brevissimo tutorial vediamo come manipolare le immagini attraverso la libreria GD di PHP, al fine di alterarne le dimensioni. Una classica applicazione di questa operazione è la creazione di thumbnail (piccole immagini di anteprima).
Vediamo subito un esempio nel quale abbiamo un'immagine di elevate dimensioni di nome mydog.jpg, posizionata nella cartella foto, di cui ne creeremo un'anteprima di dimensioni 120x90 pixel:
<?php
// Ottengo le informazioni sull'immagine originale
list($width, $height, $type, $attr) = getimagesize($_SERVER['DOCUMENT_ROOT'].'/foto/mydog.jpg');
// Creo la versione 120*90 dell'immagine (thumbnail)
$thumb = imagecreatetruecolor(120, 90);
$source = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].'/foto/mydog.jpg');
imagecopyresized($thumb, $source, 0, 0, 0, 0, 120, 90, $width, $height);
// Salvo l'immagine ridimensionata
imagejpeg($thumb, $_SERVER['DOCUMENT_ROOT']."/foto/mydog_thumb.jpg", 75);
?>
Cerchiamo di spiegare un po' il codice.
La funzione list() ottiene informazoni su un immagine. A noi in particolare interessano le sue dimesioni ($width, $height) che ci serviranno in seguito.
Le funzioni imagecreatetruecolor(), imagecreatefromjpeg(), imagecopyresized() servono, insieme, per aprire un immagine e crearne una copia di dimensioni alterate. Tutte e tre le funzioni lavorano con le immagini caricandole in memoria centrale, quindi non salvando niente sul disco.
Il salvataggio sul disco della foto ridimensionata è effettuato poi dalla funzione imagejpeg() che prende come parametri:
- La foto (tenuta in memoria centrale - in una variabile) che si vuole salvare su disco.
- Il percorso e il nome del file in cui salvare la foto.
- La qualità in cui salvare la foto.
Questo ultimo parametro (qualità), è caratteristico delle immagini JPEG e consiste in un indice che specifica la qualità con la quale salvare l'immagine. Tale indice può andare da un minimo di 1 (immagine di bassissima qualità - praticamente inintellegibile) ad un massimo di 100 (immagine ad altissima qualità). Molto spesso valori troppo alti di questo parametro fanno crescere di molto le dimensioni (in Kb) delle immagini, senza portare reali benefici alla qualità complessiva. Consiglio quindi di utilizzare valori compresi tra 65 e 85 (75 è il valore predefinito).
Le librerie grafiche GD, prevedono la gestione non solo di immagini JPEG, ma anche di immagini GIF e PNG (e molti altri). Per salvare le immagini in questi formati basta usare le apposite funzioni imagegif() e imagepng(), che funzionano in modo del tutto analogo ad imagejpg() ma che non prevedono il parametro qualità.
La stringa $_SERVER['DOCUMENT_ROOT'].'/foto/mydog.jpg' indica il file dell'immagine presente sul server. Tale immagine potrebbe anche essere stata appena caricata da remoto; in questo caso, al posto di tale stringa, avremmo ad esempio $_FILES['image']['tmp_name']. Confronta gli argomenti correlati per maggiori informazioni.
Argomenti correlati: