Imagick::getImageBlob

(PECL imagick 2, PECL imagick 3)

Imagick::getImageBlob以二进制形式返回图像序列

描述

public Imagick::getImageBlob(): string

实现直接到内存的图像格式。它以字符串形式返回图像序列。图像的格式决定了返回的二进制数据的格式(GIF、JPEG、PNG 等)。要返回其他图像格式,请使用 Imagick::setImageFormat()。

参数

此函数没有参数。

返回值

返回包含图像的字符串。

错误/异常

在错误时抛出 ImagickException。

添加备注

用户贡献的备注 4 个备注

7
Vee W
8 年前
对于想要显示“动画”GIF 的人来说,此 getImageBlob() 将只显示图像的一帧。
请改用 getImagesBlob()。

示例

<?php
$Imagick
= new \Imagick($real_source_image_path_animated_gif);
header("Content-Type: image/gif");
echo
$Imagick->getImagesBlob();
?>
2
jim at jimohalloran dot com
3 年前
针对 Trevor 上面关于 getImageBlob 可能对大型图像返回空字符串的备注。

这似乎与图像格式有关。我有一个大型(12046x8363)图像,该图像返回正常。但是,如果我调用 setImageFormat('pdf') 然后再次调用 getImageBlob()。示例

<?php
// 这里进行图像操作
$pngData = $imagick->getImageBlob(); // 返回大型 PNG
$imagick->setImageFormat('pdf');
$pdfData = $imagick->getImageBlob(); // 立即返回空字符串
?>
1
Trevor
12 年前
似乎此方法在遇到较大的数据时可能会返回零长度字符串。没有抛出异常。

<?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 似乎正在执行工作,它会延迟一段时间。但是任何地方都没有显示任何错误。)
1
anonymous at internet dot domain
3 个月前
如果 ImageMagick policy.xml 阻止处理文件格式(例如 PDF),则该函数会返回 NULL 且没有任何错误。
对于 PDF 输出,请编辑 /etc/ImageMagick-6/policy.xml 并删除禁用 PDF 权限的行。
如果您使用其他函数(例如,对 PDF 使用 readImage()),ImageMagick 会对此进行提示并输出错误消息,但此函数会静默失败。
To Top