<?php
require 'imagick.class.php';
$img = new lib_image_imagick();
$img->open('demo.gif');
$img->resize_to(300, 200, 'scale_fill', [255,255,255,0]); // 等比縮放並白底填滿
$img->add_text('© 2024 MySite', 10, 10, 0, ['font_size'=>14, 'fill_color'=>'rgba(0,0,0,0.5)']);
$img->add_watermark('logo.png', 20, 20);
$img->save_to('output.gif');
$img->output(); // 直接輸出到瀏覽器
?>
載入圖片,自動偵測格式(gif/jpg/png...),內部以 Imagick 物件管理。
裁切指定區域。GIF 會逐幀裁切並重建動畫。
| $fit 值 | 行為 |
|---|---|
| force | 強制拉伸至 $w x $h,比例可能失真 |
| scale | 等比縮放置入 $w x $h 安全框,不填滿留白 |
| scale_fill | 等比縮放並以 $fill_color 填滿安全框(預設白透明) |
| north_west / north / ... / south_east | 九宮格九方位:等比縮放後裁切指定方位 $w x $h 區域 |
疊加圖片水印,支援透明 PNG、GIF 動畫逐幀疊加。
$style 陣列可設:font、font_size、fill_color、under_color(文字背景)。
GIF 使用 writeImages(..., true) 保留多幀;其他格式用 writeImage()。
$img->border(5, 5, '#FF0000'); // 紅色邊框 $img->blur(5, 3); // 模糊 $img->gaussian_blur(5, 3); // 高斯模糊 $img->motion_blur(10, 5, 45); // 動態模糊 $img->radial_blur(10); // 徑向模糊 $img->add_noise(); // 雜訊 $img->level(0.1, 1.0, 0.9); // 色階 $img->modulate(120, 80, 100); // 亮度/飽和度/色調 $img->charcoal(5, 1); // 素描 $img->oil_paint(4); // 油畫 $img->flop(); $img->flip(); // 水平/垂直翻轉
所有寫入像素的操作(裁切、縮放、水印、文字)對 GIF 均採用 coalesceImages() → 逐幀處理 → 重建動畫 流程,確保:
getImageDelay() 完整保留setImagePage() 正確重設getImageCompose() 維持原貌new Imagick()thumbnailImage() 降解析度再精細處理memory_limit 或啟用 Imagick 磁碟快取 setResourceLimit(imagick::RESOURCE_DISK, ...)這個 lib_image_imagick 類別封裝了 Imagick 最常用的 20+ 功能,特別解決了 GIF 動畫處理的棘手細節,可直接投入生產環境作為圖片處理核心元件。原始碼開放、結構清晰,易於依專案需求擴充自訂濾鏡或批次流程。