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!
php wideimage getimagesize list resize saveto
Commentami!