在php中调整多个图像的大小而不超过内存限制


resize multiple images in php without exceeding 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个或更多提交,我会得到一个"内存耗尽"错误。我对此进行了研究,因为我的内存限制是120 MB。显然,imagecreatefromjpeg函数会占用大量内存,尤其是当文件的分辨率很大时(我的函数就是这样——因此我需要裁剪/调整它们的大小)。

有人知道有更有效的方法来完成这项任务吗?我研究过谷歌,但每个人都使用和我一样的技术。

使用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);