保存时 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);
虽然这增加了很多延迟,因为我们必须通过磁盘,但这是我能想到的最好的。
我正在尝试使用带有 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);
虽然这增加了很多延迟,因为我们必须通过磁盘,但这是我能想到的最好的。