对于想要显示“动画”gif的人。此getImageBlob() 将只显示图像的一帧。
请改用getImagesBlob()。
示例
<?php
$Imagick = new \Imagick($real_source_image_path_animated_gif);
header("Content-Type: image/gif");
echo $Imagick->getImagesBlob();
?>
(PECL imagick 2, PECL imagick 3)
Imagick::getImageBlob — 返回图像序列作为二进制数据块
实现直接到内存的图像格式。它将图像序列作为字符串返回。图像的格式决定了返回的二进制数据块的格式(GIF、JPEG、PNG等)。要返回不同的图像格式,请使用Imagick::setImageFormat()。
此函数没有参数。
返回包含图像的字符串。
发生错误时抛出ImagickException。
对于想要显示“动画”gif的人。此getImageBlob() 将只显示图像的一帧。
请改用getImagesBlob()。
示例
<?php
$Imagick = new \Imagick($real_source_image_path_animated_gif);
header("Content-Type: image/gif");
echo $Imagick->getImagesBlob();
?>
进一步补充Trevor上面关于getImageBlob可能对较大的图像返回空字符串的注释。
这似乎取决于图像格式。我有一个大的(12046x8363)图像,可以正常返回。但是,如果我调用setImageFormat('pdf'),然后再次调用getImageBlob()。示例
<?php
// 此处进行图像处理
$pngData = $imagick->getImageBlob(); // 返回一个大的PNG。
$imagick->setImageFormat('pdf');
$pdfData = $imagick->getImageBlob(); // 立即返回空字符串
?>
似乎此方法在遇到较大的数据时可能会返回零长度的字符串。不会抛出异常。
<?php
$image = new Imagick();
if (!$image->newImage(1000,1,'white')) throw new Exception();
if (!$image->scaleImage(0,200)) throw new Exception();
print "Image size: {$image->getImageWidth()},{$image->getImageHeight()}\n";
if (!$image->setImageFormat("jpeg")) throw new Exception();
$a = $image->getImageBlob();
print "Rendered to ".strlen($a)." bytes\n";
?>
限制输出图像大小,或确保获得的二进制数据块不是空的。(请注意,IM 似乎正在执行工作,它会延迟一段时间。但任何地方都没有任何错误指示。)
如果ImageMagick policy.xml阻止处理文件格式(例如PDF),则函数将返回NULL且没有任何错误。
对于PDF输出,请编辑/etc/ImageMagick-6/policy.xml并删除禁用PDF权限的行。
如果您使用其他函数,例如用于PDF的readImage(),ImageMagick会对此发出警告并输出错误消息,但此函数会静默失败。