保存时 Imagick 内存不足(案例 4)

Imagick insufficient memory (case 4) on save

我正在尝试使用带有 php 的 Imagick 保存图像。 当我打电话给 saveImage()saveImageFile() 我得到

Fatal error: Uncaught exception 'ImagickException' with message 'Insufficient memory (case 4)

图像大约1MB大,脚本可以使用256MB内存,我认为应该足够了。磁盘上有很多 space 可用。

可能是什么问题?

代码如下:

<?php
list($type, $img) = explode(';', $img);
list(, $img)      = explode(',', $img);
$data = base64_decode($img);
$image = new Imagick();
$image->readImageBlob($data);
$image->setImageFormat("jpeg");
$image->setInterlaceScheme(Imagick::INTERLACE_PLANE);
$image->writeImageFile(fopen($name.'-original.jpg','w'));
?>

如果我尝试使用 file_put_contents() 而不是 saveImage(),则会保存一个空文件。可能是服务器配置有问题?

问题出在 $image->readImageBlob($data) 上,尽管它返回成功,但生成的图像是空的。我猜这会导致稍后在保存期间某处被零除。

我使用的解决方案是先将数据保存到文件中,然后将其加载回:

list($type, $img) = explode(';', $img);
list(, $img)      = explode(',', $img);
list(,$type) = explode('/',$type);
$data = base64_decode($img);
file_put_contents($name,$data);
$image = new Imagick($name);

虽然这增加了很多延迟,因为我们必须通过磁盘,但这是我能想到的最好的。