[PHP] Creare miniature con la libreria GD

Il php, grazie all’ausilio di una libreria esterna, riesce a creare output diversi da (X)HTML. Tramite la libreria gd è creare e manipolare file immagine.

Prima di lavorare con la libreria, dobbiamo installarla! E per questo vi rimando alle istruzioni presenti nel sito degli sviluppatori.
Se abbiamo uno spazio web fornitoci da un hoster esterno, molto probabilmente non avremo la possibilità di installare la libreria.
Non di meno è vero che praticamente tutti i fornitori di hosting installano la libreria sui server Linux. Esiste anche la possibilità di installare la gd su un server Windows, ma dato il grande carico di lavoro che richiede, spesso gli hoster evitano la cosa.

Detto questo, non ci resta che scoprire se il nostro hoster ci fornisce la libreria. Già lanciando un phpinfo(); ci renderemo conto se la libreria è installata o meno e quali componenti siano abilitate. Ma possiamo anche usare la funzione gd_info(); per ottenere tale scopo.

Creiamo un nuovo file di testo e chiamiamolo "gdinfo.php". Al suo interno scriviamo:

<?php
 foreach(gd_info() as $gd => $state){
   echo $gd . ": ". $state . "<br />";
 }
?>

Se la libreria è installata otterremo un output più o meno simile a questo:

GD Version: 2.0 or higher
FreeType Support: 1
FreeType Linkage: with freetype
T1Lib Support: 1
GIF Read Support: 1
GIF Create Support: 1
JPG Support: 1
PNG Support: 1
WBMP Support: 1
XBM Support:
JIS-mapped Japanese Font Support:

Ora ecco una funzione che in automatico crea delle miniature di tutti i file immagine (gif, jpeg e png) presenti in una directory.

function CreateThumbs($dir, $resize, $comp, $prefix){
 
 $save = dirname(__FILE__) . $dir;
 $leg = opendir($save);
 $lenpx  = strlen($prefix);

 $i = 0;
 while(($file = readdir($leg)) != FALSE){
  if(!file_exists($save.$prefix.$file) && substr($save.$file, 0, $lenpx) != $prefix){
   if(strstr(@mime_content_type($save.$file), ‘image’)){
    $cosa = getimagesize($save.$file);
    $larg = ($cosa[0] * $resize)/100;
    $alte = ($cosa[1] * $resize)/100;
    $min  = imagecreatetruecolor($larg, $alte);
     switch($cosa[‘mime’]){
       case ‘image/png’:
         $im = imagecreatefrompng($save.$file);
         imagecopyresized($min, $im, 0, 0, 0, 0, $larg, $alte, imageSx($im), imageSy($im));
         imagepng($min, $save.$prefix.$file, $comp);
         $i++;
       break;
     
       case ‘image/gif’:
         $im = imagecreatefromgif($save.$file);
         imagecopyresized($min, $im, 0, 0, 0, 0, $larg, $alte, imageSx($im), imageSy($im));
         imagegif($min, $save.$prefix.$file, $comp);       
         $i++;
       break;
     
       case ‘image/jpeg’:
         $im = imagecreatefromjpeg($save.$file);
         imagecopyresized($min, $im, 0, 0, 0, 0, $larg, $alte, imageSx($im), imageSy($im));
         imagejpeg($min, $save.$prefix.$file, $comp);       
         $i++;
       break;     
     }
       imagedestroy($min);
    }
   } 
  }
 echo "Ho creato la miniatura di " . $i . " immagini";
}

La funzione creerà dei file immagine copiando e ridimensionando i file presenti nella directory target. La directory di salvataggio sarà la stessa delle immagini sorgenti. Le miniature saranno identificate con un prefix a scelta.

La funzione è incrementale. Controlla che nella directory non ci sia già la miniatura creata. Se c’è non ne crea una nuova.

L’utente è tenuto a scegliere:

  • La directory target: che è relativa alla funzione. Se la funzione è evocata in uno script presente nella stessa directory target allora dovrà essere definita con un "/".
  • La percentuale di ridimensionamento espressa in termini assoluti: se si vuole ridimensionare al 30%, scrivere solo 30.
  • Il rapporto di compressione dell’immagine creata.
  • Il prefisso dei file miniatura.

Per evocare la funzione scriverete qualcosa di simile a questo.

CreateThumbs(‘/’, 40, 90, ‘th_’);

In questo caso, la directory target è la stessa directory in cui è caricata la funzione, ridimensioneremo le immagini al 40% della grandezza originaria, con un rapporto di compressione di 90 (per il web ed immagini jpeg consigliato 85). Le miniature avranno come prefisso th_.

6 thoughts on “[PHP] Creare miniature con la libreria GD”

  1. a me non và… la funzione passa e alla fine mi stampa:

    "Ho creato la miniatura di 0 immagini"

    il percorso è corretto, e ho richiamato la funzione cosi:

    <?php
    $funzione = "CreateThumbs";
    $funzione ('/', 40, 90, 'th_');
    ?>

Comments are closed.