本文提供一個功能完整的 ThumbHandler 類別,支援圖片縮放、自動/手動裁切、文字/圖片水印(含透明度控制)、邊框、翻轉、多種輸出格式,並能智慧處理水印超出畫布的縮放適配。適用於縮圖服務、上傳處理、水印保護等場景。
$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);
$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 | 像素級翻轉實作 |
imagecreatetruecolor、imagecopyresampled 等函式。memory_limit,需調整 php.ini 或分塊處理。mb_convert_encoding 轉換。die() 終止,生產環境建議改拋出異常 (Exception) 由上層捕獲。Intervention/Image (Laravel 首選)、Imagine、ImageMagick PHP 擴展 提供更豐富功能與更佳效能。這個 ThumbHandler 類別雖屬早期 PHP GD 時代產物,但邏輯完整、功能豐富,對理解圖片處理流程極具參考價值。實務專案中建議採用現代化庫,但核心概念(座標計算、重採樣、Alpha 混合)通用不變。