yodaz
2008-11-10 09:59:48 UTC
Bonjour,
Je teste mon script de génération de miniatures, et je rencontre de gros
problèmes de consommation mémoire.
Mon hébergeur est Free, et la limite de consommation mémoire est fixée à 32M
chez cet hébergeur.
A chaque fois que j'essaie de générer une miniature avec le code ci-dessous,
j'ai systématiquement une erreur de type "Fatal error: Allowed memory size
of 33554432 bytes exhausted".
L'erreur se produit au niveau de l'appel à la fonction
imagecreatefromjpeg().
Mes images ont une taille variable entre 2 et 3,5Mo. Vu que la limite est
fixée à 32Mo, je ne comprends pas pourquoi j'ai l'erreur. Est ce que mon
script comporte une erreur ? Est ce que mon appel a imagecreatefromjpeg()
est correct ?
J'ai également essayé de convertir l'image jpeg en wbmp en utilisant
jpeg2wbmp() en redimensionnant à la volée, mais l'erreur se produit quand
même (cette fois au niveau de l'appel à jpeg2wbmp()).
Existe t-il une solution de contournement pour mon problème (plus de 32M de
mémoire utilisé pour une image de 2M me parait quand même beaucoup) ?
Merci d'avance pour vos réponses.
///////////////////////////////////////////////////////////////////////////
function thumbnailize($img)
{
$thumb="";
if (file_exists($img))
{
$imgInfo = getimagesize($img);
$imgWidth=$imgInfo[0];
$imgHeight=$imgInfo[1];
$imgType=$imgInfo['mime'];
// $imgInfo[2] -> image type 2 = JPG,JPEG
if ($imgInfo[2] == 2)
{
// check image format is jpeg
$imgSrc=imagecreatefromjpeg($img);
// source image must be larger than destination image
if ( ($imgWidth > THUMB_WIDTH) || ($imgHeight >
THUMB_HEIGHT) )
{
// if width larger than height
if ($imgHeight <= $imgWidth)
{
$ratio = THUMB_WIDTH / $imgWidth;
}
else
{
$ratio = THUMB_HEIGHT / $imgHeight;
}
}
else
{
$ratio = 1; // same as original
}
$thumb = imagecreatetruecolor(round($imgWidth * $ratio),
round($imgHeight*$ratio));
imagecopyresampled($thumb
$imgSrc,0,0,0,0,round($imgWidth*$ratio),round($imgHeight*$ratio),$imgWidth
$imgHeight);
imagedestroy($imgSrc);
// Send image file to browser
imageinterlace($thumb);
header('Content-Type: ' . $imgType);
imagejpeg($thumb, NULL, THUMB_QUALITY);
imagedestroy($imgLow);
imagedestroy($thumb);
}
}
}
///////////////////////////////////////////////////////////////////////////
Je teste mon script de génération de miniatures, et je rencontre de gros
problèmes de consommation mémoire.
Mon hébergeur est Free, et la limite de consommation mémoire est fixée à 32M
chez cet hébergeur.
A chaque fois que j'essaie de générer une miniature avec le code ci-dessous,
j'ai systématiquement une erreur de type "Fatal error: Allowed memory size
of 33554432 bytes exhausted".
L'erreur se produit au niveau de l'appel à la fonction
imagecreatefromjpeg().
Mes images ont une taille variable entre 2 et 3,5Mo. Vu que la limite est
fixée à 32Mo, je ne comprends pas pourquoi j'ai l'erreur. Est ce que mon
script comporte une erreur ? Est ce que mon appel a imagecreatefromjpeg()
est correct ?
J'ai également essayé de convertir l'image jpeg en wbmp en utilisant
jpeg2wbmp() en redimensionnant à la volée, mais l'erreur se produit quand
même (cette fois au niveau de l'appel à jpeg2wbmp()).
Existe t-il une solution de contournement pour mon problème (plus de 32M de
mémoire utilisé pour une image de 2M me parait quand même beaucoup) ?
Merci d'avance pour vos réponses.
///////////////////////////////////////////////////////////////////////////
function thumbnailize($img)
{
$thumb="";
if (file_exists($img))
{
$imgInfo = getimagesize($img);
$imgWidth=$imgInfo[0];
$imgHeight=$imgInfo[1];
$imgType=$imgInfo['mime'];
// $imgInfo[2] -> image type 2 = JPG,JPEG
if ($imgInfo[2] == 2)
{
// check image format is jpeg
$imgSrc=imagecreatefromjpeg($img);
// source image must be larger than destination image
if ( ($imgWidth > THUMB_WIDTH) || ($imgHeight >
THUMB_HEIGHT) )
{
// if width larger than height
if ($imgHeight <= $imgWidth)
{
$ratio = THUMB_WIDTH / $imgWidth;
}
else
{
$ratio = THUMB_HEIGHT / $imgHeight;
}
}
else
{
$ratio = 1; // same as original
}
$thumb = imagecreatetruecolor(round($imgWidth * $ratio),
round($imgHeight*$ratio));
imagecopyresampled($thumb
$imgSrc,0,0,0,0,round($imgWidth*$ratio),round($imgHeight*$ratio),$imgWidth
$imgHeight);
imagedestroy($imgSrc);
// Send image file to browser
imageinterlace($thumb);
header('Content-Type: ' . $imgType);
imagejpeg($thumb, NULL, THUMB_QUALITY);
imagedestroy($imgLow);
imagedestroy($thumb);
}
}
}
///////////////////////////////////////////////////////////////////////////