Home PHP Resizing di immagini in PHP con Wideimage
Resizing di immagini in PHP con Wideimage
Programmazione & Co.
Sabato 11 Febbraio 2012 12:22

Ho già parlato più volte di come effettuare il resizing di una immagine in PHP durante l'upload.

Però mi è stata suggerita quest'ottima libreria per manipolare e salvare immagini: Wideimage.

Con questa libreria è posibile fare anche il resizing, il cropping e il merging in maniera semplice.

Qui vederemo come fare l'upload e il resizing.

Com'è possibile vedere dalla documentazione è possibile passare alla funzione resize() anche solo l'altezza o la larghezza; in questi casi l'altro lato verrà ridimensionato in automatico mantenendo le proporzioni.

E questa è una cosa molto comoda.

Qui potete la doc abbastanza completa.

Nell'esempio useremo subito l'upload multiplo con il controllo sulla larghezza in modo tale che se è più larga di 500px venga ridimensionata.

Quindi partendo da questo form:

<form action="" method="post" name="news" enctype="multipart/form-data">
<input type="file" name="file[]" /><br/>
<input type="file" name="file[]" /><br/>
<input type="file" name="file[]" /><br/>
<input type="submit" value="Submit" name="btn_news" />
</form>

Che ha tre input file e quindi permette da 1 a 3 file contemporaneamente.

La parte PHP sarà una cosa del genere:

if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['btn_news'])) {
include 'lib/wideimage/WideImage.php';
 $upload = FALSE;
 $maxSize = 819200;
 $acceptType = array(
 'png' => 'image/png',
 'jpeg' => 'image/jpeg',
 'jpg' => 'image/jpg'
 );
 $cartella = "../../IMMAGINI/gallery_news/"; // MODIFICARE IL PERCORSO
 for ($i = 0; $i < count($_FILES['file']['name']); $i++) {
 if ($_FILES['file']['name'][$i] != "") {
 list($width, $height, $type, $attr) = getimagesize($_FILES['file']['tmp_name'][$i]);
 $nome_upload = uniqid($_POST['titolo'] . ' - ', true) . strrchr($_FILES['file']['name'][$i], '.');
 $destinazione = $cartella . $nome_upload;
 if ($_FILES['file']['size'][$i] <= $maxSize) {
 if (in_array($_FILES['file']['type'][$i], $acceptType)) {
 if ($width > 500) {
 $imageLarge = WideImage::load($_FILES['file']['tmp_name'][$i]);
 $thumb = $imageLarge->resize(500, null);
 $thumb->saveToFile($destinazione);
 } else {
 $imageLarge = WideImage::load($_FILES['file']['tmp_name'][$i]);
 $thumb = $imageLarge->saveToFile($destinazione);
 }
 $upload = TRUE;
 if ($upload) {
 echo "File " . $i . " inserito<br/>";
 } else {
 echo "Errore nell'upload<br/>";
 }
 } else {
 echo "Tipo di file non valido<br/>";
 }
 } else {
 echo "File troppo grande<br/>";
 }
 } elseif ($_POST['btn_news']) {
 echo 'Non ci sono file da inserire<br/>';
 }
 }
}

Al submit del form richiamiamo la libreria e impostiamo alcune variabili:

  • $upload ci servirà dopo, una volta superati tutti i controlli
  • impostiamo la massima dimensione supportata (800 KB)
  • impostiamo le estensioni supportate: JPEG, JPG e PNG

Poi cominciamo i vari controlli.

Con getimagesize() recuperiamo la misure delle immagini.

Sotto controlliamo che ogni file non pesi più di $maxSize e che abbia un'estensione supportata.

Superati questi controlli controlliamo la larghezza: se supera i 500px carichiamo l'immagine con WideImage::load() e poi usiamo la funzione resize() dando solo la larghezza come parametro.

Come detto prima l'altezza verrà ridimensionata automaticamente e in proporzione.

Infine usiamo saveToFile() per salvare il file.

Sennò facciamo direttamente il salvataggio senza manipolare nulla.

Infine $upload diventa TRUE e stampiamo il risultato (o facciamo altro).

Questa variabile booleana ci serve perchè così possiamo continuare con altre operazione se ne abbiamo bisogno; io ad esempio devo salvare ogni nome del file nel db e lo faccio solo se tutto è andato a buon fine.

Tenere in considerazione quest'ottima libreria!

Ultimo aggiornamento Sabato 11 Febbraio 2012 12:49