- Home
- Categorie
- Coding e Sistemistica
- PHP
- Upload immagine e creazione miniature
-
Upload immagine e creazione miniature
Ciao a tutti, ho un problema con il ridimensionamento di un'immagina...
Eseguo l'upload di un file JPG (o JPEG), fin qui tutto ok, creo due miniature di dimensioni differenti e le salvo in due cartelle del server.
Il tutto funziona correttamente, ma quando vado a vedere i file appena creati noto che la miniatura più grande è molto (ma molto) più scura del file originale.
Posto il codice, spero che qualcuno sappia darmi una mano...... if(move_uploaded_file($_FILES['txt_file']['tmp_name'], $upload)) { //Upload eseguito con successo $img = $upload; // percorso al file dell'immagine $dest_o = "img/" . $uploadfile; // directory di salvataggio della miniatura grande $dest_m = "img/min/" . $uploadfile; // directory di salvataggio della miniatura piccola // dimensioni ridotte della miniatura grande da creare list($o_width, $o_height, $o_type, $o_attr) = getimagesize($img); if ( ($o_width > $o_height) && ($o_width > 307) ) { $thumbWidth_o = 307; $thumbHeight_o = $o_height * 307 / $o_width; // per mantenere le proporzioni } else { if ($o_height > 230) { $thumbHeight_o = 230; $thumbWidth_o = $o_width * 230 / $o_height; } else { $thumbHeight_o = $o_height; $thumbWidth_o = $o_width; } } // dimensioni miniatura piccola da creare list($m_width, $m_height, $m_type, $m_attr) = getimagesize($img); if (( $m_width > $m_height) && ($m_width > 100) ) { $thumbWidth_m = 100; $thumbHeight_m = $m_height * 100 / $m_width; } else { if ($m_height > 100) { $thumbHeight_m = 100; $thumbWidth_m = $m_width * 100 / $m_height; } else { $thumbHeight_m = $m_height; $thumbWidth_m = $m_width; } } $thumb_o = imagecreate($thumbWidth_o, $thumbHeight_o) or die("Impossibile creare la miniatura"); $thumb_m = imagecreate($thumbWidth_m, $thumbHeight_m) or die("Impossibile creare la miniatura"); $src_o = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale"); $src_m = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale"); imagecopyresized($thumb_o, $src_o, 0, 0, 0, 0, $thumbWidth_o, $thumbHeight_o, imageSx($src_o), imageSy($src_o)) or die("Impossibile ridimensionare l'immagine"); imagecopyresized($thumb_m, $src_m, 0, 0, 0, 0, $thumbWidth_m, $thumbHeight_m, imageSx($src_m), imageSy($src_m)) or die("Impossibile ridimensionare l'immagine"); if (imagejpeg($thumb_o, $dest_o)) echo "Immagine salvata"; else die("Impossibile salvare la miniatura"); if (imagejpeg($thumb_m, $dest_m)) echo "Miniatura salvata"; else die("Impossibile salvare la miniatura"); } ...
Grazie!!!
Teox
-
Prova a sostituire imagecopyresized con imagecopyresampled.
Ti consiglio anche di usare una sola di queste due:$src_o = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale"); $src_m = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale");
$src = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale");
E poi usare $src invece che $src_o e $src_m
Così risparmi parecchia memoria in elaborazione
-
Grazie per la risposta tempestiva!!!
Ho provato ad utilizzare la funzione "imagecopyresampled", ma il problema persiteva...
Ho cercato le specifiche di "imagecopyresized" sul manuae di php (http://it2.php.net/manual/it/function.imagecopyresized.php), in una nota dice che ci sono alcuni problemi...Nota: There is a problem due to palette image limitations (255+1 colors).
...e per risolverli...To skip this problem, please use a truecolor image as a destination image, such as one created by imagecreatetruecolor().
Il mio inglese è piuttosto scarso, ma, da quello che ho capito dovevo sostituire l'imagecreate con l'imagecreatetruecolor.
Modifiche fatte e problema RISOLTO!!!
Grazie, ciao a todos!
elTeox