La soluzione migliore è quella di salvare un copia dell'immagine se non è presente.
fai cosi:
il browser richiede l'immagine.
il server controlla nella dir e se c'è la miniatura la mostra.
Se la miniatura non c'è la crea e la salva per le prossime richieste.
Per creare la miniatura ti posso dare questa funzione:
Codice PHP:
/**
* make_thumb_square()
*
* @param mixed $image : L'immagine da croppare
* @param mixed $a : altezza dell'immagine
* @param mixed $l : Larghezza dell'immagine
* @param mixed $final : dimensioni finali dell'immagine
* @param mixed $dir_to_put : dove mettere la miniatura creata
* @param mixed $path : path del sito
* @return : crea l'immagine croppata nella dir indicata
*/
function make_thumb_square ($image,$a,$l,$final,$dir_to_put,$path) {
# estensione per creare le immagini
$estensione = explode(".",strtolower($image));
$ext = array_pop($estensione);
# preparo lo switch per il tipo esatto di funzione in base al tipo d'immagine
switch($ext){
default:
$funzione_image_create = "ImageCreateFromJpeg";
$funzione_image_new = "ImageJpeg";
break;
case "jpg":
$funzione_image_create = "ImageCreateFromJpeg";
$funzione_image_new = "ImageJpeg";
case "jpeg":
$funzione_image_create = "ImageCreateFromJpeg";
$funzione_image_new = "ImageJpeg";
break;
case "png":
$funzione_image_create = "ImageCreateFromPng";
$funzione_image_new = "ImagePng";
break;
case "gif":
$funzione_image_create = "ImageCreateFromGif";
$funzione_image_new = "ImageGif";
break;
}
$quality_thumb = ($ext == 'png') ? '8' : '80';
# vedo in quale cartella si trova l'immagine
$file = $path.'/'.urldecode($image);
$file_thumb = $path.'/'.$dir_to_put.'/'.urldecode($image);
$centerX = $a/2;
$centerY = $l/2;
if( $l > $a ){
$luy = 0;
$lux = $centerY-$centerX;
$rdy = $a;
$rdx = $a;
}
else{
$lux = 0;
$luy = $centerX-$centerY;
$rdx = $l;
$rdy = $l;
}
# restituisce un elemento identificativo per l'immagine data
$img_original = $funzione_image_create($file);
//ImageCreateTrueColor: funzione per creare un'immagine con illimitati colori e con altezza e lunghezza dati
$img_final = ImageCreateTrueColor($final,$final);
# funzione per ridurre le immagini:
/* il primo argomento è il nome della nuova immagine,
il secondo è il nome originale,
i quattro prossimi valori sono le porzioni di immagine da prendere
(se messe a zero prende tutta l'immagine originale),
gli ultimi quattro valori sono le dimensioni delle due immagini. */
imagecopyresampled($img_final, $img_original, 0, 0, $lux, $luy, $final, $final, $rdx, $rdy);
//questa funzione crea fisicamente il nuovo file
$funzione_image_new($img_final, $file_thumb, $quality_thumb);
//queste due funzioni liberano la memoria dalle immagini create
ImageDestroy($img_original);
ImageDestroy($img_final);
} # end make_thumb_square