Je travaille sur une construction d'une galerie et le but est une barrière d'entrée basse. Mon utilisateur est une personne qui prend des photos en utilisant son appareil photo numérique afin que la taille du fichier soit comprise entre 200 et 400 Ko par image. Le problème que je rencontre dans l'utilisation de la bibliothèque GD est que chaque image redimensionnée et téléchargée utilise environ 90 Mo de mémoire + lorsque le serveur a une limite de 64 Mo. Lorsque j'utilise ImageMagick, il expire et déclenche une erreur interne du serveur.Comment télécharger/redimensionner des images prises avec un appareil photo numérique?
Je me demande si quelqu'un a de l'expérience avec le téléchargement/redimensionnement de ces grandes tailles d'image et pourrait me donner quelques indications.
Merci,
Levi
modifier: Voici mon code pour télécharger
/** Begin Multiple Image Upload**/
$numberImages = count($_FILES['galFile']['name'])-1;
for($i=1;$i<=$numberImages;$i++)
{
$imageName = $_FILES['galFile']['name'][$i];
$imageType = $_FILES['galFile']['type'][$i];
$imageSize = $_FILES['galFile']['size'][$i];
$imageTemp = $_FILES['galFile']['tmp_name'][$i];
$imageError = $_FILES['galFile']['error'][$i];
//Make sure it is an image
if(in_array(end(explode(".", $imageName)), $allowed))
{
//Where to upload image to
$uploadFile = $uploadDir . $imageName;
if (file_exists($uploadFile))
{
//What to do if file already exists
//Append random number to the end
$front = explode(".", $imageName);
$randomNum = rand(1,100);
$front[0] = $front[0].$randomNum;
$imageName = $front[0].".".$front[1];
$uploadFile = $uploadDir . $imageName;
}
if(move_uploaded_file($imageTemp,$uploadFile))
{
//Add $imageName to DB
$query = "INSERT INTO galleryImages VALUES(\"0\",\"$lastInsert\",\"$imageName\",\"$i\")";
mysql_query($query);
reSizePic($uploadFile);
}
}
}
Voici le code GD j'avais utilisé pour redimensionner:
function reSizePic($image)
{
$source_pic = $image;
$destination_pic = $image;
$max_width = 660;
$max_height = 500;
$src = imagecreatefromjpeg($source_pic);
list($width,$height)=getimagesize($source_pic);
$x_ratio = $max_width/$width;
$y_ratio = $max_height/$height;
if(($width <= $max_width) && ($height <= $max_height))
{
$tn_width = $width;
$tn_height = $height;
}
elseif (($x_ratio * $height) < $max_height)
{
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else
{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$tmp = imagecreatetruecolor($tn_width,$tn_height);
imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);
imagejpeg($tmp,$destination_pic,100);
imagedestroy($src);
imagedestroy($tmp);
}
Et cela est le code ImageMagick que j'utilise pour redimensionner:
$resource = NewMagickWand();
MagickReadImage($resource,$image);
MagickSetImageCompressionQuality($resource, 100);
$resource = MagickTransformImage($resource,'0x0','660x500');
MagickWriteImage($resource, $image);
DestroyMagickWand($resource);
Vous faites probablement quelque chose d'inefficace car ImageMagick devrait être capable de gérer des images de 400ko sans problème. Combien essayez-vous de redimensionner à la fois? Pouvez-vous envoyer votre code? –
Je suppose que vous ouvrez un fichier mais ne le ferme pas ou quelque chose pour obtenir autant d'utilisation de la mémoire. Publiez votre code peut-être? – Anthony
Je ne compterais pas trop sur 200-400KB - les caméras de 3,2 à 5 mégapixels sont courantes ces jours-ci. – Blorgbeard