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

PHP 自適應縮略圖生成類:完整實現與使用指南

     編輯:PHP 相關知識

前言

在 Web 開發中,動態生成縮略圖是常見需求。本文分享一個功能完善的 PHP 類 ThumbnailImage,支援等比例縮放、圖片水印、文字標籤、多種輸出格式(JPEG/PNG/GIF)以及漸進式顯示,適合快速整合到專案中。

核心特性

  • 自適應縮放:依據最大寬高限制,保持原圖比例縮放,可選是否放大小圖。
  • 水印支援:可疊加 Logo 圖片,支援九宮格定位(左上、右下、置中等)。
  • 文字標籤:使用 TrueType 字體繪製文字,可自訂顏色、大小、角度與位置。
  • 多格式輸出:JPEG(可調品質)、PNG、GIF,並支援輸出到瀏覽器或儲存檔案。
  • 錯誤處理:完整的常數錯誤訊息,便於除錯。

類別結構概覽

主要屬性

屬性說明
$src_file來源圖片路徑
$dest_file目標檔案路徑(STDOUT 表示直接輸出)
$dest_type輸出格式:THUMB_JPEG、THUMB_PNG、THUMB_GIF
$max_width, $max_height縮略圖最大寬高(像素)
$fit_to_max是否將小圖放大至最大尺寸
$jpeg_qualityJPEG 品質(-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();
?>

進階技巧

  1. 直接輸出到瀏覽器:將 $thumb->dest_file = STDOUT;,並確保腳本前無任何輸出,適合做圖片代理 URL。
  2. 批次處理:搭配 glob() 遍歷目錄,迴圈建立實例並呼叫 Output() 存檔。
  3. 記憶體優化:處理超大圖片時,可先用 getimagesize() 檢查尺寸,超過限制則跳過或分塊處理。

常見問題

縮略圖模糊怎麼辦?
確認 imagecreatetruecolor() 建立真彩畫布,並使用 imagecopyresampled() 高品質重採樣。
PNG 透明背景變黑?
在建立目標畫布後,啟用 Alpha 混合:
imagealphablending($dest, false);
imagesavealpha($dest, true);
中文字體不顯示?
$label['font'] 必須指向有效的 .ttf 檔案絕對路徑,且伺服器需安裝 FreeType 支援。

總結

ThumbnailImage 類別封裝了 GD 庫的常用操作,程式碼結構清晰、擴充性佳。只需少量設定即可滿足大多數縮略圖生成場景,是 PHP 專案中處理圖片縮放的輕量利器。

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