Home / Programmazione / PHP / Upload di immagini con resizing in PHP
Mattepuffo

Upload di immagini con resizing in PHP

Upload di immagini con resizing in PHP

Ho già parlato a più riprese di come effettuare l'upload di immagini, ma non avevo mai considerato il resizing.

Quindi vi posto qua uno script che va a integrare quelli precedenti.

In pratica una volta fatto il submit del form vengono effettuate queste operazioni:

  • controllo della dimensione in KB
  • controllo dell'estensione
  • controllo sulle misure della foto

Passati questi controlli la foto viene uplodata e ridimensionata.

Ecco lo script:

if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['save'])) { // AL SUBMIT DEL FORM

$maxSize = 819200; //byte => 800
$acceptType = array(
'png' => 'image/png',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'gif' => 'image/gif'
);
$cartella = "../img_testata/"; // IMPOSTO LA DIRECTORY DI DESTINAZIONE

if (is_uploaded_file($_FILES['file']['tmp_name'])) {
list($width, $height, $type, $attr) = getimagesize($_FILES['file']['tmp_name']); // RECUPERO LE INFO SULLE IMMAGINI
$destinazione = $cartella . "FOTO" . strrchr($_FILES['file']['name'], '.'); // IMPOSTO LA DESTINAZIONE FINALE e il nome
if ($_FILES['file']['size'] <= $maxSize) { // CONTROLLO LA DIMENSIONE IN KB
if (in_array($_FILES['file']['type'], $acceptType)) { // CONTROLLO L'ESTENSIONE
if (($width > 505) && ($height > 200) && ($width > $height)) { // CONTROLLO LE MISURE
$thumb = imagecreatetruecolor(505, 200);
imagecopyresized($thumb, imagecreatefromjpeg($_FILES['file']['tmp_name']), 0, 0, 0, 0, 505, 200, $width, $height);

if (imagejpeg($thumb, $destinazione)) {

echo '<script type="text/javascript">alert("Immagine uplodata: ' . $img . '");</script>';
} else {
$img = "Errore nell'upload";
echo '<script type="text/javascript">alert("' . $img . '");</script>';
}
} else {
$img = "Dimensioni non corrette: larghezza minima 505, altezza minima 200, l'altezza non può superare la larghezza";
echo '<script type="text/javascript">alert("' . $img . '");</script>';
}
} else {
$img = "Tipo di file non supportato";
echo '<script type="text/javascript">alert("' . $img . '");</script>';
}
} else {
$img = "File troppo grande";
echo '<script type="text/javascript">alert("' . $img . '");</script>';
}

}

Nelle righe

$thumb = imagecreatetruecolor(505, 200);
imagecopyresized($thumb, imagecreatefromjpeg($_FILES['file']['tmp_name']), 0, 0, 0, 0, 505, 200, $width, $height);

ancora non ho creato l'immagine sul disco, ma solo in memoria.

In sostanza ho creato solo una copia dandogli le dimensioni nuove rispetto a quelle vecchie.

L'upload vero e proprio lo faccio sotto, dentro all'if con la funzione

imagejpeg($thumb, $destinazione)

alla quale passo l'immagine caricata in memoria e la destinazione.

Le funzioni che dovete tenere a mente qua sono nell'ordine:

Considerate anche che questo script è facilmente adattabile ad un upload multiplo.