对于想要显示“动画”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 会对此进行提示并输出错误消息,但此函数会静默失败。