想象保存

时间:2016-11-19 19:09:06

标签: php imagick

我正在尝试用php使用Imagick保存图像。 当我致电saveImage()saveImageFile()时,我会

  

致命错误:未捕获异常'ImagickException',消息'内存不足(案例4)

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

可能是什么问题?

代码如下:

<?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(),则会保存一个空文件。也许服务器配置有问题?

1 个答案:

答案 0 :(得分:0)

问题在于$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);

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