在不超出内存限制的情况下调整php中​​的多个图像

时间:2012-01-12 17:32:28

标签: php image-resizing memory-limit

我目前正在尝试获取一个表单,该表单允许使用PHP在服务器上上传和调整大小。客户端上传的每张图片大小约为2.5mb。

我目前正在使用move_uploaded_file()功能。

将文件移动到服务器上没有问题。当我尝试裁剪时出现问题。我的主机上没有 ImageMagick 我正在使用此设置(并非所有代码都是相关的,这是一个循环,$width等正在改变不同的裁剪大小)

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $output_filename, 80);

目前,这只适用于2张图片。如果提交了3个或更多,我会收到“内存耗尽”错误。我研究了这个,因为我的内存限制是120mb。显然imagecreatefromjpeg函数使用了大量内存,特别是如果文件具有较大的分辨率(我的确如此 - 因此我需要对它们进行裁剪/调整大小)。

有谁知道更有效的方法来完成这项任务?我在google上进行过研究,但每个人都使用相同的技术。

1 个答案:

答案 0 :(得分:5)

使用imagedestroy清除与$ image和$ image_p相关联的所有内存:

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $output_filename, 80);
imagedestroy($image);
imagedestroy($image_p);