調整 GIF 動畫尺寸比單張圖片複雜,必須逐幀解碼、縮放、再重新編碼,同時保留延遲時間、透明色、處置方式等資訊。本文提供一個開箱即用的 gifresizer 類別,內含完整的 GIF 解析器、GD 縮放邏輯與編碼器,可直接整合至專案。
require_once 'gifresizer.php';
$gr = new gifresizer();
$gr->temp_dir = 'temp_frames'; // 需可寫入權限
$gr->resize('source.gif', 'output.gif', 500, 500);
imagecopyresized 逐幀縮放,保留透明色與調色盤。| 方法 | 用途 |
|---|---|
resize($src, $dst, $w, $h) | 公開介面,執行完整流程 |
decode() | 解析原始 GIF,產生幀檔 |
resizeframes() | 呼叫 GD 縮放每一幀暫存檔 |
encode() | 將縮放後幀重新編碼為 GIF |
clearframes() | 清除暫存幀檔 |
$temp_dir 必須存在且可寫入(建議 0777),否則解碼失敗。memory_limit。完整類別程式碼較長(約 600 行),已整理於 gifresizer.php,主要包含:
get_gif_header, get_graphics_extension, get_image_block 等)imagecolortransparent, imagepalettecopy)完整程式碼請參考原文件,已去除除錯函式並修正部分語法相容 PHP 7/8。