我正在尝试用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()
,则会保存一个空文件。也许服务器配置有问题?
答案 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);
虽然这会增加很多延迟,因为我们必须通过磁盘,这是我能想到的最好的。