Bedo's Blog

Uno sguardo alla tecnologia di oggi, perche sia veramente d'aiuto nella vita di tutti i giorni

Creare thumbnail con php

L’articolo di oggi vi fara capire come e’ possibile creare dei thumbnail partendo da immagini di qualsiasi dimensione, in PHP. Vogliamo quindi avere una funzione che, una volta richiamata, generi una thumbnail di un’immagine che vogliamo noi in una posizione ben precisa.

La funzione createSingleThumb() richiede, in ordine:

  • Il nome del file immagine
  • La posizione del file immagine
  • La posizione dove vorremo salvare il thumbnail
  • La larghezza del thumbnail (l’altezza verra calcolata di conseguenza)

Come prima cosa, riporto per intero il codice, ben commentato.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
  Copyright (C) 2009 - Luca Bedogni, <web@lucabedogni.it>
*/
function createSingleThumb($filename, $pathToImage, $pathToThumb, $thumbWidth) {
  if (!(file_exists($pathToThumb.$filename))) {
    echo "Creo il thumbnail per {$filename}";
 
  // Provo prima con il jpg, altrimenti png
  if (!($img = imagecreatefromjpeg( "{$pathToImage}{$filename}" )))
    $img = imagecreatefrompng( "{$pathToImage}{$filename}" );
    $width = imagesx( $img );
    $height = imagesy( $img );
 
    // Calcolo le dimensioni del thumbnail basandomi sulla larghezza inserita
    $width2 = $thumbWidth;
    $height2 = floor( $height * ( $thumbWidth / $width ) );
 
    // Creo l'immagine che sara poi il thumbnail
    $tmpimg = imagecreatetruecolor( $new_width, $new_height );
 
    // Scrivo la prima immagine (originale) nella seconda (thumbnail)
    // avendo cura di modificare le dimensioni
    imagecopyresized( $tmpimg, $img, 0, 0, 0, 0,
      $width2, $height2, $width, $height );
 
    // Salvo l'immagine come file
    imagejpeg( $tmpimg, "$pathToThumb.$filename" );
  } else {
    echo "L'immagine e' gia presente per $filename";
  }
}

I passaggi piu importanti, ed eventualmente quelli dove potete agire se volete fare qualche modifica, sono:

  • Riga 2: controllo che il thumbnail non esista gia. Se esiste, non sovrascrivo, altrimenti lo creo. Se volete che comunque il thumbnail venga riscritto, anche se gia presente, rimuovete questo if (e il conseguente ramo else).
  • Righe 12-13: calcolo la nuova dimensione del thumbnail. La larghezza sara uguale a quella inserita dall’utente quando richiama la funzione, mentre invece l’altezza viene calcolata in proporzione, per non avere immagine distorte ma con le dimensioni corrette.
  • Righe 20-21: con la funzione imagecopyresized() posso copiare un’immagine in un’altra tenendo conto delle diverse dimensioni, che e’ proprio quanto vogliamo fare noi.

Questo e’ quanto, avete domande? C’e qualcosa che non e’ chiaro?

Forse ti potrebbe anche interessare:

  1. Corso PHP – Lezione 1
  2. Creare pattern ripetuti online

Sun, June 7 2009 » codice, php

2 Responses

  1. Rob September 7 2009 @ 11:08

    Ciao!
    Grazie del codice che hai messo a disposizione. Io l’ho subito usato per una mia applicazione ma non riesco ad ottenere le thumbnails nella cartella specificata.
    Mi spiego: nel mio script devo salvare prima in una cartella(foto) le immaggini uplodate da un form, poi ricavare, nella cartella thumb, la miniatura dell’immagine originale.
    Di seguito inserisco il mio script:

    200000) {

    echo “Il file non deve superare i 400Kb”;
    break;}

    if(!@in_array($_FILES, $types)){

    echo”formato file non consentito”;
    break;}

    if (file_exists(‘foto/’.$_FILES)) {

    echo “nome foto giĆ  esistente”;
    break;}

    if (move_uploaded_file($_FILES, ‘foto/’.$_FILES)) {

    function createSingleThumb($filename, $pathToImage, $pathToThumb, $thumbWidth) {

    if (!($img = imagecreatefromjpeg( “{$pathToImage}{$filename}” )))
    $img = imagecreatefrompng( “{$pathToImage}{$filename}” );
    $width = imagesx( $img );
    $height = imagesy( $img );

    $width2 = $thumbWidth;
    $height2 = floor( $height * ( $thumbWidth / $width ) );

    $tmpimg = imagecreatetruecolor( $new_width, $new_height );

    imagecopyresized( $tmpimg, $img, 0, 0, 0, 0,$width2, $height2, $width, $height );

    imagejpeg( $tmpimg, “$pathToThumb.$filename” );
    }

    echo “caricamento effettuato”;
    break;}

    }
    } while(false);
    ?>

    puoi darmi una mano?
    Ciao e grazie!

  2. Bedo Bedo September 7 2009 @ 16:11

    Ciao e grazie per il commento.

    Sei sicuro che la cartella abbia i permessi di scrittura?

    Ciao

One Ping

  1. diggita.it June 7 2009 @ 10:28

Leave a Reply