PHP Conference Japan 2024

Imagick::writeImage

(PECL imagick 2 >= 2.3.0, PECL imagick 3)

Imagick::writeImage將影像寫入指定的檔案名稱

說明

public Imagick::writeImage(string $filename = NULL): bool

將影像寫入指定的檔案名稱。如果檔案名稱參數為 NULL,影像會寫入由 Imagick::readImage() 或 Imagick::setImageFilename() 設定的檔案名稱。

參數

filename

要寫入影像的檔案名稱。檔案名稱的副檔名定義了檔案的類型。可以使用 format: 前綴來強制指定格式,無論檔案副檔名為何,例如 "jpg:test.png"。

回傳值

成功時回傳 true

新增註解

使用者貢獻註解 4 則註解

SkepticaLee
10 年前
當使用 Abyss Web Server 套件中的 Imagick 時,此方法和 writeImages() 都不起作用。必須宣告格式,並使用其他方法或程序儲存檔案,例如:

<?php
$im
= new Imagick ();
$im->newImage (300, 225, "blue");
$im->writeImage ("test_0.jpg"); // 失敗,沒有錯誤訊息
// 改用以下方式
$im->setImageFormat ("jpeg");
file_put_contents ("test_1.jpg", $im); // 可用,或者:
$im->imageWriteFile (fopen ("test_2.jpg", "wb")); // 也可用
?>
icinagle at gmail dot com
13 年前
如果您嘗試操作上傳的檔案,然後在同一個 Apache + mod_dav 要求中儲存該檔案,則會失敗。
mod_dav 在上傳檔案的要求期間會鎖定該檔案,因此嘗試儲存最小的檔案(例如 1kb)將會失敗,並出現「無法配置記憶體」的錯誤。
pfz at pfzone dot org
12 年前
使用 Imagick 3.1.0RC2, PHP4.8
如果您計劃覆寫您正在處理的檔案,在執行 writeImage 之前,請考慮在寫入語句之前清除檔案緩衝區

<?php
$image
= new Imagick($your_file);
/* 一些處理 */

clearstatcache(dirname($your_file));
// 或
unlink($your_file);
$image->writeImage($your_file);
?>
我發現產生的檔案大小不正確。這可能會導致截斷,因為檔案沒有擴展。
這發生在使用 JPEG 和 PNG 時。

這行程式碼對我來說有效,沒有這個 hack。
<?php
file_put_contents
($your_file, $image);
?>

請勿依賴 getImageLength() 來傳送您的影像,尤其是在 keepalive 開啟時。內容長度是相關的,必須設定。如果給定的尺寸不正確,您的影像將會被截斷。
請在寫入後使用 filesize($your_file_) 或 strlen($image) 代替 (這會呈現您的影像並更新 getImageLength() 的結果)。
Anonymous
10 年前
我使用 Imagick::readImageBlob 開啟影像。當我想要儲存調整大小後的影像時,Imagick::writeImage 無效,但 Imagick::writeImageFile 有效。

$image = new Imagick();
$image->readImageBlob($image_data);
// $image->writeImage($fileDst) 無效
if($f=fopen($fileDst, "w")){
$image->writeImageFile($f);
}
To Top