【发布时间】:2014-11-20 04:22:51
【问题描述】:
我在这一行收到上述错误:
imagefill($canvas, 0, 0, imagecolorallocate($canvas, 255, 255, 255));
该脚本适用于所有图像类型,但它会在分辨率大于 4000 x 3000 像素的图像上崩溃。图像本身只有 500kb。 这是所有代码:
$canvas = imagecreatetruecolor(imagesx($source), imagesy($source));
imagefill($canvas, 0, 0, imagecolorallocate($canvas, 255, 255, 255));
imagealphablending($canvas, TRUE);
imagecopy($canvas, $source, 0, 0, 0, 0, imagesx($source), imagesy($source));
imagedestroy($source);
$quality = 100; // 0 = worst / smaller file, 100 = better / bigger file
imagejpeg($canvas, $strPath.$p_Id.".jpg", $quality); //----- save image
ImageDestroy($canvas);
【问题讨论】:
-
4000 像素 x 3000 像素 @ 4 字节/像素 = 48MB 只是为了将该图像保存在内存中,甚至在您开始操作它之前,并且您正在复制图像,因此您拥有该 48MB 的多个副本在记忆中......你达到极限并不奇怪
-
500KB 只是应用有损压缩后的文件大小。如果你需要操作图片,你必须在内存中分配它们。