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

PHP 批量生成圖片縮略圖完整實現:支援多格式、智能裁切、MD5 命名

     編輯:PHP 相關知識

PHP 批量生成圖片縮略圖完整實現

處理大量圖片縮略圖生成是 Web 開發常見需求。本文提供一個功能完整的 image 類別,支援 JPEG/PNG/GIF 多格式、智能等比例裁切、MD5 防衝突命名、遠端圖片本地化、目錄自動建立等企業級特性。

核心功能特色

  • 智能裁切算法:依目標寬高比與原圖比例比較,自動決定橫向或縱向裁切區域,保持主體視覺完整。
  • 多格式支援:自動偵測 MIME 類型,呼叫對應 imagecreatefrom* 與 image* 函數。
  • MD5 命名策略:reNames() 產生 {寬}_{高}_{md5前10碼}.{副檔名} 格式,避免檔名衝突。
  • 遠端圖片本地化:getimg() 透過 file_get_contents() 下載遠端圖片至暫存目錄。
  • 覆蓋與保留控制:$over 控制是否覆蓋既有檔案,$keep 決定是否保留原始檔名。
  • GIF 處理選項:$regif 開關控制是否處理動畫 GIF(預設跳過)。

關鍵方法詳解

縮略圖生成核心 Mini($src, $w, $h, $q=80)

// 計算裁切區域
$k1 = round($h/$w, 2);      // 目標比例
$k2 = round($height/$width, 2); // 原圖比例
if ($k1 < $k2) {
    // 原圖較寬,左右裁切
    $width_a = $width;
    $height_a = round($width * $k1);
    $sw = 0;
    $sh = ($height - $height_a) / 2;
} else {
    // 原圖較高,上下裁切
    $width_a = $height / $k1;
    $height_a = $height;
    $sw = ($width - $width_a) / 2;
    $sh = 0;
}
// 使用 imagecopyresampled 高品質重採樣
imagecopyresampled($nim, $im, 0, 0, $sw, $sh, $w, $h, $width_a, $height_a);

公開介面 reImg($src, $w, $h, $q)

簡化呼叫:設定 $keep=1 保留原檔名結構,直接呼叫 Mini()。

使用範例

$image = new image();
echo $image->reImg("images/zht.jpg", 75, 75, 80);
echo "<br/>";
echo $image->reImg("images/m8920.jpg", 75, 75, 80);

現代化改進建議

  1. 引入 Intervention Image 或 Imagine 等成熟函式庫,支援更多格式(WebP、AVIF)與操作(濾鏡、水印)。
  2. 加入非同步處理佇列(如 RabbitMQ + Worker),避免大量圖片阻塞 HTTP 請求。
  3. 實作快取機制:CDN + 檔案指紋(內容雜湊)實現永久快取。
  4. 使用 Imagick 擴充功能獲得更好效能與格式支援。

此類別展示了原生 GD 函式庫處理圖片的完整邏輯,適合學習底層原理或輕量級專案直接使用。

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