處理大量圖片縮略圖生成是 Web 開發常見需求。本文提供一個功能完整的 image 類別,支援 JPEG/PNG/GIF 多格式、智能等比例裁切、MD5 防衝突命名、遠端圖片本地化、目錄自動建立等企業級特性。
imagecreatefrom* 與 image* 函數。reNames() 產生 {寬}_{高}_{md5前10碼}.{副檔名} 格式,避免檔名衝突。getimg() 透過 file_get_contents() 下載遠端圖片至暫存目錄。$over 控制是否覆蓋既有檔案,$keep 決定是否保留原始檔名。$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);
Intervention Image 或 Imagine 等成熟函式庫,支援更多格式(WebP、AVIF)與操作(濾鏡、水印)。Imagick 擴充功能獲得更好效能與格式支援。此類別展示了原生 GD 函式庫處理圖片的完整邏輯,適合學習底層原理或輕量級專案直接使用。