對於想要顯示「動畫」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 — 以 blob 形式傳回影像序列
實作直接到記憶體的影像格式。它以字串形式傳回影像序列。影像的格式決定傳回 blob 的格式(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";
?>
限制您的輸出影像大小,或確保您取回的 blob 不是空的。(請注意,IM 似乎正在執行工作,它會延遲一段時間。但沒有任何地方顯示任何錯誤。)
如果 ImageMagick 的 policy.xml 阻止處理檔案格式(例如 PDF),函數會傳回 NULL 而不會有任何錯誤。
對於 PDF 輸出,請編輯 /etc/ImageMagick-6/policy.xml 並移除停用 PDF 權限的行。
如果您使用其他函數,例如用於 PDF 的 readImage(),ImageMagick 會發出警告並輸出錯誤訊息,但此函數會靜默失敗。