Codice PHP:
<?
// Definisco con una costante
// il per corso fisico alla cartella che contiene le immagini
define('IMAGE_BASE', './immagini');
//Definisco le costanti per le dimensioni standard
//dell'immagine di errore (immagine generata con GD)
define('MAX_WIDTH', 150);
define('MAX_HEIGHT', 150);
//Definisco la costante che mi indica la percentuale di ridimensionamento immagine
define('NEW_SIZE', 75);
//Definisco la costante per l'immagine (fisica) da visualizzare in caso di errore
define('GIF_ICON', './immagini/error.gif');
function Thumbnalizer ($image_file)
{
//Costruisco il percorso al file immagine
//La variabile $image_file contiene il nome del file
//completo di estensione. Es: pippo.jpg
$image_path = IMAGE_BASE . "/filippo.jpg";
// Controllo che il file esiste e sia accessibile
//se non lo fosse passo all'header della pagina
//il target GIF e uso le funzioni fpassthru(per visualizzare) ed fopen
//(per aprire) il file immagine di errore
if (!filesize($image_path) || !is_readable($image_path)){
header("Content-type: image/gif");
fpassthru(fopen(GIF_ICON, 'rb'));
exit;
}
//Inizializzo le variabili che mi serviranno per
//Calcolare le nuove dimensioni dell'immagine
//E la variabile che conterrà l'immagine creata
$new_size = NEW_SIZE;
$img = null;
//Estraggo l'estensione del file dalla stringa path
//in base a tale estensione inizializzo tramite le chiamte
//alle funzioni GD apposite la variabile immagine
$ext = strtolower(end(explode('.', $image_path)));
if ($ext == 'jpg' || $ext == 'jpeg') {
$img = imagecreatefromjpeg($image_path);
} else if ($ext == 'png') {
$img = imagecreatefrompng($image_path);
// Alcune versioni delle librerie GD 2.x e 1.x
// non posseggono il supporto per la creazione delle immagini
// .GIF in tal caso si può utilizzare il codice precedentemente
//visto per vilualizzare un immagine di errore predefinita
} else if ($ext == 'gif') {
$img = imagecreatefromgif($image_path);
//header("Content-type: image/gif");
//fpassthru(fopen(GIF_ICON, 'rb'));
//exit;
}
//Se l'immagine è stata correttamente caricata continuo
if ($img) {
//la funzione getimagesize ritorna un array da 0 a 3
//con rispettivamente larghezza, altezza e tipo immagine.
$imginfo = getimagesize($image_path);
$width = $imginfo[0];
$height = $imginfo[1];
//Definisco la percentuale di ridimento
$scale = max($width, $height) / $new_size;
$scale = max($scale, 1.0);
//Calcolo le nuove dimensioni dell'immagine in maniera proporzionale
$new_width = 150;
$new_height = 100;
//Creo una nuova immagine temporanea usando la funzione imagecreatetruecolor
//che è disponibile solo nelle librerie GD 2.x e che da
//rispetto alla vecchia imagecreate(da usare per chi ha le GD 1.x)
//risultati ottimi in fatto di qualità dell'immagine
$tmp_img = imagecreatetruecolor($new_width, $new_height);
//$tmp_img = imagecreate($new_width, $new_height);
//A questo punto dall'immagine di origine $img creo nel contenitore
//$tmp_img l'immagine ridimensionata. Attenzione ai parametri della funzione
//imagecopyresampled, non li spiegherò, sono facilmente intuibili.
//Tale funzione è disponibile per chi ha installato sul prorio server il modulo
//delle GD 2.x, nel caso abbia le GD 1.x deve usare la funzione imagecopyresized
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0,
$new_width, (int)$new_height, $width, $height);
//imagecopyresised($tmp_img, $img, 0, 0, 0, 0,
// $new_width, (int)$new_height, $width, $height);
//Quindi distruggo (tolgo dalla memoria) la variabile $img (immagine originale)
//e le assegno il valore nuovo (immagine ridimensionata) contenuto in $tmp_img
imagedestroy($img);
$img = $tmp_img;
}
//Se qualcosa va storto e la variabile $img è vuota
//allora provvedo alla creazione attraverso i comandi
//di grafica delle GD di un immagine a cui assegno
//le dimenzioni predefinte con define, uno sfondo giallo
//(rgb: 255,255,204) e disegno con le funzioni imageline
//due linee blu (rgb: 70,70,70) trasversali all'interno della mia
//immagine quadrata
//
if ($img == null) {
$img = imagecreate(MAX_WIDTH, MAX_HEIGHT);
imagecolorallocate($img,255,255,204);
$c2 = imagecolorallocate($img,70,70,70);
imageline($img,0,0,MAX_WIDTH,MAX_HEIGHT,$c2);
imageline($img,MAX_WIDTH,0,0,MAX_HEIGHT,$c2);
//$text_color = ImageColorAllocate($img, 102 ,153, 204
}
//A questo punto alla pagina di chiamata
//faccio ritornare l'header che le fa capire che trattasi
//di immagine (di JPEG)
header("Content-type: image/jpeg");
//La funzione qui sotto serve proprio a questo
//E' possibile specificare nei parametri, opzionali
//un nome e la percentuale di compressione
imagejpeg($img,'',100); //imagedestroy($tmp_img);
//infine libero la memoria con la funzione imagedestroy
imagedestroy($img);
}
$image = $_GET['image'];
Thumbnalizer ($image);
?>
Fa il suo lavoro senza problemi... l'unica cosa è che non riesco a salvare l'immagine creata in una data cartella...