PHP Conference Japan 2024

Imagick::getImageBlob

(PECL imagick 2, PECL imagick 3)

Imagick::getImageBlob以 blob 形式傳回影像序列

描述

public Imagick::getImageBlob(): string

實作直接到記憶體的影像格式。它以字串形式傳回影像序列。影像的格式決定傳回 blob 的格式(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";
?>

限制您的輸出影像大小,或確保您取回的 blob 不是空的。(請注意,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