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

PHP 多功能圖片處理類:縮圖、水印、裁切、翻轉全能實作

     編輯:PHP 相關知識

本文提供一個功能完整的 ThumbHandler 類別,支援圖片縮放、自動/手動裁切、文字/圖片水印(含透明度控制)、邊框、翻轉、多種輸出格式,並能智慧處理水印超出畫布的縮放適配。適用於縮圖服務、上傳處理、水印保護等場景。

核心功能清單

  • 縮放模式:百分比縮放、固定寬高(等比/強制)、自動裁切正方形、手動座標裁切。
  • 水印支援:
    • 文字水印:自訂字體(內建/TTF)、大小、顏色、透明度、九宮格位置、偏移量。
    • 圖片水印:支援 PNG/GIF 透明通道、合併透明度、超出畫布自動縮放、九宮格位置。
  • 輔助功能:邊框(寬度/顏色)、水平/垂直翻轉、多格式輸出(JPG/PNG/GIF/WBMP)、品質控制。
  • 智慧保護:水印超出目標尺寸時自動縮小、座標邊界檢查、目錄自動建立。

使用範例速覽

基本縮放 + 圖片水印

$t = new ThumbHandler();
$t->setSrcImg('img/test.jpg');
$t->setDstImg('tmp/new_test.jpg');
$t->setMaskImg('img/logo.png');
$t->setMaskPosition(1); // 左上
$t->setMaskImgPct(80);  // 80% 不透明度
$t->setDstImgBorder(4, '#dddddd');
$t->createImg(300, 200); // 固定寬高

百分比縮放 + 文字水印

$t = new ThumbHandler();
$t->setSrcImg('img/test.jpg');
$t->setMaskWord('Copyright © 2024');
$t->setMaskFontColor('#ffffff');
$t->setMaskFontSize(14);
$t->setDstImgBorder(10, '#dddddd');
$t->createImg(50); // 50% 縮放

自動裁切正方形縮圖

$t = new ThumbHandler();
$t->setSrcImg('img/test.jpg');
$t->setCutType(1); // 自動裁切
$t->setDstImg('tmp/thumb.jpg');
$t->createImg(60, 60); // 輸出 60x60 正方形

手動裁切指定區域

$t = new ThumbHandler();
$t->setSrcImg('img/test.jpg');
$t->setCutType(2); // 手動裁切
$t->setSrcCutPosition(100, 100); // 來源座標
$t->setRectangleCut(300, 200);   // 裁切寬高
$t->setDstImg('tmp/crop.jpg');
$t->createImg(300, 200);

中文文字水印 (TTF 字體)

$t = new ThumbHandler();
$t->setSrcImg('img/test.jpg');
$t->setMaskFont('c:/windows/fonts/msyh.ttc'); // 微軟雅黑
$t->setMaskFontSize(20);
$t->setMaskFontColor('#ffff00');
$t->setMaskTxtPct(20); // 文字透明度
$text = '中文水印';
$str = mb_convert_encoding($text, 'UTF-8', 'gb2312'); // 編碼轉換
$t->setMaskWord($str);
$t->createImg(50);

類別架構關鍵點

屬性/方法用途
setSrcImg()載入來源圖片,自動偵測類型 (JPG/PNG/GIF/WBMP)
setDstImg()設定輸出路徑,自動建立目錄
_setNewImgSize()核心尺寸計算邏輯,依 cut_type 分派三種模式
_createMask()統一處理文字/圖片水印繪製流程
_isFull()檢查水印是否超出畫布,超出則觸發縮放策略
_loadMaskImg()載入水印圖片並取得尺寸
_output()依格式輸出圖片 (imagejpeg/png/gif),非 IE 送出 Content-Type
_flipH/_flipV像素級翻轉實作

注意事項與最佳實踐

  • GD 擴展必須啟用:需支援 imagecreatetruecolor、imagecopyresampled 等函式。
  • 記憶體限制:處理大圖 (如 4000x3000+) 可能超過 memory_limit,需調整 php.ini 或分塊處理。
  • TTF 字體路徑:Windows 絕對路徑、Linux 相對路徑均可,確保檔案可讀。
  • 中文編碼:PHP 內部建議統一 UTF-8,輸入若為 GB2312 需 mb_convert_encoding 轉換。
  • 錯誤處理:類別內部使用 die() 終止,生產環境建議改拋出異常 (Exception) 由上層捕獲。
  • 現代替代方案:Intervention/Image (Laravel 首選)、Imagine、ImageMagick PHP 擴展 提供更豐富功能與更佳效能。

結語

這個 ThumbHandler 類別雖屬早期 PHP GD 時代產物,但邏輯完整、功能豐富,對理解圖片處理流程極具參考價值。實務專案中建議採用現代化庫,但核心概念(座標計算、重採樣、Alpha 混合)通用不變。

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