Home / Programmazione / PHP / Resizing di immagini in PHP con Wideimage
Mattepuffo

Resizing di immagini in PHP con Wideimage

Resizing di immagini in PHP con Wideimage

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!