首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP Imagick 圖片處理大師類:裁切、縮略圖、水印、GIF 動畫完美支援

     編輯:PHP 綜合知識

類別特色

  • GIF 動畫全支援:逐幀處理並保留延遲、循環屬性
  • 多種縮放模式:force(強制)、scale(等比)、scale_fill(等比填滿)、九宮格九方位裁切
  • 水印靈活:支援圖片水印、文字水印、透明度、字型、顏色自訂
  • 鏈式操作:open → resize → watermark → save 一氣呵成

快速上手

<?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(); // 直接輸出到瀏覽器
?>

核心方法詳解

1. open($path)

載入圖片,自動偵測格式(gif/jpg/png...),內部以 Imagick 物件管理。

2. crop($x, $y, $width, $height)

裁切指定區域。GIF 會逐幀裁切並重建動畫。

3. resize_to($w, $h, $fit, $fill_color)

$fit 值行為
force強制拉伸至 $w x $h,比例可能失真
scale等比縮放置入 $w x $h 安全框,不填滿留白
scale_fill等比縮放並以 $fill_color 填滿安全框(預設白透明)
north_west / north / ... / south_east九宮格九方位:等比縮放後裁切指定方位 $w x $h 區域

4. add_watermark($path, $x, $y)

疊加圖片水印,支援透明 PNG、GIF 動畫逐幀疊加。

5. add_text($text, $x, $y, $angle, $style)

$style 陣列可設:font、font_size、fill_color、under_color(文字背景)。

6. save_to($path) / output($header)

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 動畫處理細節

所有寫入像素的操作(裁切、縮放、水印、文字)對 GIF 均採用 coalesceImages() → 逐幀處理 → 重建動畫 流程,確保:

  • 幀延遲 getImageDelay() 完整保留
  • 畫布大小 setImagePage() 正確重設
  • 合成模式 getImageCompose() 維持原貌

效能建議

  • 大量批次處理時,重複使用同一實例,避免反覆 new Imagick()
  • 處理超大圖(>5000px)先 thumbnailImage() 降解析度再精細處理
  • 記憶體不足時調整 memory_limit 或啟用 Imagick 磁碟快取 setResourceLimit(imagick::RESOURCE_DISK, ...)

結語

這個 lib_image_imagick 類別封裝了 Imagick 最常用的 20+ 功能,特別解決了 GIF 動畫處理的棘手細節,可直接投入生產環境作為圖片處理核心元件。原始碼開放、結構清晰,易於依專案需求擴充自訂濾鏡或批次流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved