Home » developing » Funzione per la realizzazione di miniature in php

Funzione per la realizzazione di miniature in php

Questa funzione mi accompagna da circa sei anni nello sviluppo di qualsiasi applicazione PHP, visto che ormai qualsiasi applicazione ha bisogno di thumbnail delle immagini, è stata perfezionata negli anni per accelerare il lavoro e per rendere la miniatura sempre nelle giuste proporzioni, funziona con i tre formati della rete: GIF, JPEG e PNG, il risultato però sarà sempre in formato JPEG perchè è quello che rende meglio oltre ad essere il più leggero.

Per poter creare le miniature è “assolutamente necessario” avere a disposizione le libreria GD Graphic Library, libreria che già presente nei software XAMPP, EasyPHP e gli hosting Aruba e Altervista, quindi non ci dovrebbero essere problemi.

Basta passare a questa funzione l’indirizzo fisico dell’immagine, le dimensioni volute e se necessario anche il nome del file con la miniatura, la funzione  ci retituirà sempre il nome del file con la miniatura:

function kf_thumbnail($filename, $w, $h, $saveto = null)
{
    if(!isset($saveto))
        $saveto = "$filename.$w.$h.jpg";
    if(!file_exists($saveto))
    {
        $new_width = $w;
        $new_height = $h;
        list($width, $height, $mime) = getimagesize($filename);
        if($width<$w && $height<$h)
        {
            return basename($filename);
        }
        $ratio1=$width/$w;
        $ratio2=$height/$h;
        if($ratio1>$ratio2) {
            $new_width=$w;
            $new_height=intval($height/$ratio1);
        }else{
            $new_height=$h;
            $new_width=intval($width/$ratio2);
        }
        $image_p = imagecreatetruecolor($new_width, $new_height);
        $dest_y = 0;
        $dest_x = 0;;
        static $first = 0;
        if($mime == 1)
            $image = imagecreatefromgif($filename);
        else if($mime == 2)
            $image = imagecreatefromjpeg($filename);
        else if($mime == 3)
            $image = imagecreatefrompng($filename);
        imagecopyresized($image_p, $image, $dest_x, $dest_y, 0, 0, $new_width, $new_height, $width, $height);
        imagejpeg($image_p, $saveto, 100);
    }
    return basename($saveto);
}

Il funzionamento è abbastanza semplice salvo per il calcolo delle nuove dimensioni, praticamente se l’immagine è più piccola delle dimensioni della miniatura restituisce direttamente l’immagine originale, altrimenti decide se mantenere fissa l’altezza o la larghezza in base al fattore (vecchia dimensione/nuova dimensione).

E’ quindi possibile mettere una dimensione gigantesca all’altezza, in tal caso sarà sempre ridimensionato mantenendo la larghezza fissa.

Altra cosa fondamentale della funzione è il controllo sull’esistenza della miniatura, in caso contrario vi assicuro che l’applicazione andrà lentamente e nel peggiore dei casi la pagina raggiungerà il memory limit e mostrerà un simpatico fatal error, quindi nel caso di immagini grandi consiglio addirittura di precaricare le immagini in punti leggeri dell’applicazione ed evitare che che una pagina sia costretta a fare la miniatura di troppe immagini contemporaneamente.

  1. Nessun commento ancora...
  1. Nessun trackback ancora...