天天看點

php imagick 剪切gif,php Imagick擴充處理gif圖檔錯誤

應用場景,圖檔本地上傳到伺服器項目臨時檔案夾下,然後轉存至分布式檔案系統,處理過程中,遇到對圖檔的格式轉換處理:

public functionimageFormat($filepath,$newfile= true,$type= ‘jpg’)

{

$image= new Imagick ($filepath);

$image->setImageFormat($type);

if ($newfile)

{

//生成新的檔案

$pictureName=$this->rand_string(); //縮略圖名字

$filepath=dirname($filepath) . ‘/’ .$pictureName. ‘.’ .$type;

$image->writeImage($filepath);

$this->tmpfiles[] =$filepath; //将新的臨時檔案存儲

}

else

{

//覆寫原檔案

$image->writeImage($filepath);

}

return$filepath;

}

提煉一下,主要有兩個步驟:

$image = new Imagick(“FILEPATH”);

$image->writeImage(“FILEPATH”);>

Imagick擴充将檔案讀入到$image對象中,然後經過格式處理,再寫入到指定檔案路徑中。然後在針對gif圖檔的處理過程中,會出現錯誤,即便是不經過格式處理,直接讀完然後寫,就會造成圖檔資料丢失,gif動畫圖檔,隻會保留第一幀,也就是動态的圖檔經過擴充處理後,變成靜态圖檔了。

由于實際場景相對複雜一些,當時沒有找到問題所在,一直在檢查上傳過程和Mogilefs的存儲問題,糾結了一上午,最後找到是Imagick的問題。

這是一個php的bug,詳細位址:https://bugs.php.net/bug.php?id=61879

解決辦法就是更新php的版本,或者修改imagic類的C源檔案重新編譯。