PHP Conference Japan 2024

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
13年前
似乎此方法在遇到较大的数据时可能会返回零长度的字符串。不会抛出异常。

<?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
7个月前
如果ImageMagick policy.xml阻止处理文件格式(例如PDF),则函数将返回NULL且没有任何错误。
对于PDF输出,请编辑/etc/ImageMagick-6/policy.xml并删除禁用PDF权限的行。
如果您使用其他函数,例如用于PDF的readImage(),ImageMagick会对此发出警告并输出错误消息,但此函数会静默失败。
To Top