在 Web 開發中,動態生成縮略圖是常見需求。本文分享一個功能完善的 PHP 類 ThumbnailImage,支援等比例縮放、圖片水印、文字標籤、多種輸出格式(JPEG/PNG/GIF)以及漸進式顯示,適合快速整合到專案中。
| 屬性 | 說明 |
|---|---|
$src_file | 來源圖片路徑 |
$dest_file | 目標檔案路徑(STDOUT 表示直接輸出) |
$dest_type | 輸出格式:THUMB_JPEG、THUMB_PNG、THUMB_GIF |
$max_width, $max_height | 縮略圖最大寬高(像素) |
$fit_to_max | 是否將小圖放大至最大尺寸 |
$jpeg_quality | JPEG 品質(-1 為預設) |
$interlace | 漸進式顯示開關 |
$logo, $label | 水印與標籤設定陣列 |
Output():核心流程——讀取原圖 → 計算目標尺寸 → 建立真彩畫布 → 重採樣縮放 → 疊加水印/標籤 → 輸出或儲存。GetThumbSize():依比例計算目標寬高,若 fit_to_max=false 且原圖較小則保持原尺寸。AddLogo()、AddLabel():分別處理圖片與文字水印疊加。ParseColor():將十六進位色碼轉為 RGB 陣列。<?php
require_once 'thumbnailimage.php';
$thumb = new ThumbnailImage('uploads/photo.jpg');
$thumb->dest_file = 'thumbs/photo_thumb.jpg'; // 輸出檔案
$thumb->dest_type = THUMB_JPEG;
$thumb->jpeg_quality = 85;
$thumb->max_width = 300;
$thumb->max_height = 300;
$thumb->fit_to_max = false; // 不放大小圖
// 選擇性加入 Logo
$thumb->logo['file'] = 'assets/logo.png';
$thumb->logo['horz_pos'] = POS_RIGHT;
$thumb->logo['vert_pos'] = POS_BOTTOM;
// 選擇性加入文字標籤
$thumb->label['text'] = '© MySite';
$thumb->label['font'] = 'fonts/arial.ttf';
$thumb->label['size'] = 14;
$thumb->label['color'] = '#FFFFFF';
$thumb->label['horz_pos'] = POS_RIGHT;
$thumb->label['vert_pos'] = POS_BOTTOM;
$thumb->Output();
?>
$thumb->dest_file = STDOUT;,並確保腳本前無任何輸出,適合做圖片代理 URL。glob() 遍歷目錄,迴圈建立實例並呼叫 Output() 存檔。getimagesize() 檢查尺寸,超過限制則跳過或分塊處理。imagecreatetruecolor() 建立真彩畫布,並使用 imagecopyresampled() 高品質重採樣。imagealphablending($dest, false);
imagesavealpha($dest, true);$label['font'] 必須指向有效的 .ttf 檔案絕對路徑,且伺服器需安裝 FreeType 支援。ThumbnailImage 類別封裝了 GD 庫的常用操作,程式碼結構清晰、擴充性佳。只需少量設定即可滿足大多數縮略圖生成場景,是 PHP 專案中處理圖片縮放的輕量利器。