【发布时间】:2010-05-13 15:14:54
【问题描述】:
我正在尝试使用 PHP: GD 来处理 JPEG 图像的目录(大约 600+,范围从 50k 到 500k)来调整大小并保存图像,但我在此过程的早期遇到了一些障碍.仅正确处理 3 张图像(30K、18K 和 231K)后,我得到 Allowed memory size of 16777216 bytes exhausted PHP 致命错误。
我正在浏览图片并调用以下代码:
list($w, $h) = getimagesize($src);
if ($w > $it->width) {
$newwidth = $it->width;
$newheight = round(($newwidth * $h) / $w);
} elseif ($w > $it->height) {
$newheight = $it->height;
$newwidth = round(($newheight * $w) / $h);
} else {
$newwidth = $w;
$newheight = $h;
}
// create resize image
$img = imagecreatetruecolor($newwidth, $newheight);
$org = imagecreatefromjpeg($src);
// Resize
imagecopyresized($img, $org, 0, 0, 0, 0, $newwidth, $newheight, $w, $h);
imagedestroy($org);
imagejpeg($img, $dest);
// Free up memory
imagedestroy($img);
我尝试使用imagedestroy 函数释放内存,但似乎没有任何影响。该脚本总是在imagecreatefromjpeg 代码行中一直阻塞。
我检查了 php.ini 并且 memory_limit = 16M 设置似乎保持正确。但我无法弄清楚为什么内存会被填满。它不应该将内存释放回垃圾收集器吗?我真的不想增加 memory_limit 设置。这似乎是一个糟糕的解决方法,可能会在未来导致更多问题。
仅供参考:我正在从命令提示符运行我的脚本。它不应该影响功能,但可能会影响您的反应,所以我想我应该提一下。
谁能看看我是否只是遗漏了一些简单的东西,或者这里是否存在设计缺陷?你会认为这将是一项非常简单的任务。这肯定是可能的,对吧?
【问题讨论】: