Pages Menu

Posted by on 30 / 03 / 2009 in PHP-MySQL | 6 comments

Ridimensionare immagini (foto) in PHP

Spesso abbiamo la necessità di creare delle gallerie fotografiche per i siti web. Altre volte è il cliente stesso che ci chiede la possibilità di poter uplodare in maniera del tutto autonoma le proprie immagini sul sito web.
In quest’ultimo caso dobbiamo creare un file PHP che permetta di eseguire le seguenti operazioni:
1- Far caricare l’immagine sul server web tramite una form.
2- Creare in maniera automatica una immagine piccola (thumb) per la galleria.
3- Creare successivamente un’immagine grande (big) per permettere al visitatore del sito di ingrandire la foto cliccandoci sopra.
Vediamo un esempio facile e (come dico sempre io) PRONTO ALL’USO!

Prima di tutto creiamo la form:

<form action="”&lt;?php" enctype="application/x-www-form-urlencoded">” method=”post” enctype=”multipart/form-data” &gt;
Scegli l’immagine da salvare sul sito web:
<input name="”uploadfile”/" type="text" />
<input type="text" value="”Carica" />
</form>

Adesso creiamo sul server web l’immagine piccola e grande del file.
NOTA: il codice sotto riportato vale solo per immagini formato JPG!!!

if (!empty($_FILES["uploadfile"]["name"]) &amp;&amp; $_FILES['uploadfile']['error'] != 1 &amp;&amp; ereg(.jpg$”, $_FILES['uploadfile']['name'])) {
   // Questo è il file temporaneo creato dal PHP
   $uploadedfile = $_FILES['uploadfile']['tmp_name'];
 
   // Creiamo una immagine dal file temporaneo per poi poterla ridimensionare
   $src = imagecreatefromjpeg($uploadedfile);
 
   // Salviamo le dimensioni originali dell’immagine
   list($width,$height)=getimagesize($uploadedfile);
 
   // Creiamo adesso l’immagine piccola dandogli delle dimensioni
   // predefinite (in questo caso 150×150 pixel), è comunque
   // possibile mantenere l’aspect ratio originale, in questo caso
   // vedere più sotto quando viene creata l’immagine BIG
   $newwidth=150;
   $newheight=150;
   $tmp=imagecreatetruecolor($newwidth,$newheight);
 
   // Qui viene ridimensionata l’immagine originale e copiata all’interno della
   // variabile $tmp
   imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
 
   // Adesso l’immagine appena creata viene salvata sul server web
   // Specificare qui il percorso dove dovrà essere salvata
   // Nel nostro esempio in: ./img/thumbs/
   $filename1 =./img/thumbs/. $_FILES['uploadfile']['name'];
   imagejpeg($tmp,$filename1,100);
 
   // Passiamo alla creazione di un’altra immagine che diventerà quella BIG
   $src2 = imagecreatefromjpeg($uploadedfile);
 
   // In questo caso assegnamo solo il parametro larghezza
   // a 400 pixels per poi mantere l’aspect ratio.
   $newwidth2=400;
   $newheight2=($height/$width)*$newwidth2;
   $tmp2=imagecreatetruecolor($newwidth2,$newheight2);
 
   // Creiamo l’immagine BIG (solita procedura di sopra)
   imagecopyresampled($tmp2,$src2,0,0,0,0,$newwidth2,$newheight2,$width,$height);
 
   // Salviamo l’immagine BIG sul server web
   $filename2 =./img/big/. $_FILES['uploadfile']['name'];
   imagejpeg($tmp2,$filename2,100);
 
   // Cancelliamo adesso dalla memoria le immagini temporanee precedentemente create
   imagedestroy($src);
   imagedestroy($tmp);
 
   imagedestroy($src2);
   imagedestroy($tmp2);
   echo “Upload completato……
”;
}

Note finali: tramite la funzione
ereg(“.jpg$”, $_FILES[‘uploadfile’][‘name’])
riportata nell’IF viene controllato se il file caricato ha estensione .jpg,
ma NON se è realmente un file JPG.
Per maggiore sicurezza userei la funzione basename() su $_FILES.

6 Comments

  1. Grazie….. 🙂

  2. Ottimo, proprio quello che mi serviva! Grazie infinite! 😉

  3. Ciao volevo sapere se funziona anche con Sharepoint.

  4. Ciao Roberta,
    mai utilizzato con Sharepoint, quindi non saprei aiutarti.

  5. Scusate, ottimo codice, ma non si farebbe prima ad utilizzare la classe SmartImage? questa utilizza le stesse funzioni ma permette un utilizzo delle stesse in maniera molto più semplice, documentatevi e vedete che è così, io la utilizzo ed è una bomba davvero.

  6. Ciao Sebastiano, questo codice è del 2009, quindi sicuramente adesso ci saranno classi PHP già pronte e semplici da utilizzare 🙂

Post a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *