[PHP] Creare miniature al volo di gif, png e jpeg

php at davidonzo.comIn vista di un restyling del blog, mi sono scritto un file che permette di creare al volo delle miniature di file immegine nei formati più comuni.

Lo script in questione prende in get un file immagine e lo ridimensiona in funzione dei pixel specificati. E’ possibile ridimensionare immagini jpeg, gif e png. E’ richiesta la libreria GD.

<?php
   $file = $_GET[‘file’];
   $resize = $_GET[‘w’];
   $altez  = $_GET[‘h’];

    $cosa = getimagesize($file);
    $width = ($resize < $cosa[0]) ? $resize : $cosa[0];
    $alte = (!$altez) ? ceil(($cosa[1] * $width)/$cosa[0])+1 : $altez;
    $min  = imagecreatetruecolor($width, $alte);
     switch($cosa[‘mime’]){
       case ‘image/png’:
         header(‘Content-Type: image/png’);
         $im = imagecreatefrompng($file);
         imagealphablending($min, false);
         imagecopyresized($min, $im, 0, 0, 0, 0, $width, $alte, imageSx($im), imageSy($im));
         imagesavealpha($min, true);
         imagepng($min,”,8,PNG_ALL_FILTERS);
       break;
    
       case ‘image/gif’:
         header(‘Content-Type: image/png’);
         $im = imagecreatefromgif($file);
         imagealphablending($min, false);
         $colorTransparent = imagecolorallocatealpha($min, 0, 0, 0, 127);
         imagefill($min, 0, 0, $colorTransparent);
         imagecopyresized($min, $im, 0, 0, 0, 0, $width, $alte, imageSx($im), imageSy($im));
         imagesavealpha($min, true);
         imagepng($min,”,8,PNG_ALL_FILTERS);
       break;
    
       case ‘image/jpeg’:
       case ‘image/jpg’:
         header(‘Content-Type: image/jpeg’);
         $im = imagecreatefromjpeg($file);
         imagecopyresized($min, $im, 0, 0, 0, 0, $width, $alte, imageSx($im), imageSy($im));
         imagejpeg($min,”,85);      
       break;    
     }
      imagedestroy($min);
?>

Qualche specifica sull’utilizzo

Scrivendo il codice nel file resize.php (o come volete chiamarlo), basterà lanciare in GET lo script nel seguente modo:


http://example.com/resize.php?file=http://example.com/img.png&w=200&h=100

var $file – Obbligatorio – string

Deve essere un indirizzo valido ad una immagine in formato gif, jpeg o png.

var $w – Obbligatorio – integer

Imposta la larghezza dell’immagine, risimensionandola nei pixel specificati. Nel caso in cui $h non sia specificato l’immagine verrà ridimensionata mantenendo le proporzioni iriginali.

var $h – Opztionale – integer

Imposta l’altezza dell’immagine in pixel. Questo parametro può far perdere le proporzioni originali dell’immagine. Da usare con cautela.

TODO

Mancano nello script eccezioni di file not found, illeggibilità dell’immagine, tipo non supportato. Sinceramente a me non servono, ma se qualcuno volesse aggiungere queste parti di codice e condividerle farete cosa gradita.