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

ThinkPHP 使用 Image 類別產生縮圖完整教學

     編輯:PHP 相關知識

Image 類別位置與載入

ThinkPHP 內建 Image 類別位於 ThinkPHP/Extend/Library/ORG/Util/Image.class.php,使用 import 載入:

<?php
import('ORG.Util.Image');
$img = new Image();

取得圖片資訊

$imagePath = './Uploads/photo.jpg'; // 相對於入口檔案
$info = $img::getImageInfo($imagePath);
// 回傳陣列:width, height, type, size, mime 等
var_dump($info);
/*
array(5) {
  'width'  => int(800)
  'height' => int(600)
  'type'   => int(2)      // 1=GIF, 2=JPG, 3=PNG, 4=SWF
  'size'   => int(45231)
  'mime'   => 'image/jpeg'
}
*/

產生縮圖:thumb2 方法

/**
 * 產生縮圖
 * @param string $srcPath   原圖路徑
 * @param string $savePath  縮圖儲存路徑(含檔名)
 * @param string $type      圖片類型:jpg, png, gif...
 * @param int $maxW         最大寬度
 * @param int $maxH         最大高度
 * @return bool
 */
$ok = $img::thumb2($imagePath, './Uploads/thumb_photo.jpg', 'jpg', 300, 200);
if ($ok) {
    echo '縮圖產生成功';
} else {
    echo '失敗:縮圖尺寸不可大於原圖';
}

關鍵限制與注意事項

  • 縮圖尺寸不可超過原圖:若 $maxW > 原寬 或 $maxH > 原高,thumb2 會回傳 false。需先檢查原圖尺寸。
  • 路徑基準:./ 為入口檔(通常是 index.php)所在目錄,非專案根目錄。
  • 權限:目標目錄需可寫入(Linux 建議 chmod 755 或 www-data 擁有)。
  • GD 庫支援:伺服器需安裝 PHP GD 擴展並支援對應圖片格式。

進階:等比例縮放輔助函式

function smartThumb($src, $dest, $maxW, $maxH) {
    import('ORG.Util.Image');
    $img = new Image();
    $info = $img::getImageInfo($src);
    if (!$info) return false;
    
    // 計算等比例尺寸
    $ratio = min($maxW / $info['width'], $maxH / $info['height']);
    if ($ratio >= 1) return false; // 無需縮小
    
    $newW = (int)($info['width'] * $ratio);
    $newH = (int)($info['height'] * $ratio);
    
    return $img::thumb2($src, $dest, image_type_to_extension($info['type'], false), $newW, $newH);
}

// 使用:長邊不超過 300px
smartThumb('./photo.jpg', './thumb.jpg', 300, 300);

常見錯誤排查

現象原因解決
thumb2 回傳 false目標尺寸大於原圖先檢查尺寸或使用等比例計算
Call to undefined method未正確 import 類別確認 import('ORG.Util.Image') 路徑正確
縮圖模糊/失真GD 版本或參數問題檢查 GD 資訊,嘗試調整品質參數
無法讀取原圖路徑錯誤或權限不足使用絕對路徑,確認目錄可讀

ThinkPHP 3.2+ 新版本說明

ThinkPHP 3.2 起 Image 類別移至 Think\Image,支援鏈式操作與更多功能(水印、裁切、旋轉):

use Think\Image;
$image = new Image();
$image->open('./photo.jpg')
       ->thumb(300, 200, Image::THUMB_CENTER) // 多種裁切模式
       ->water('./logo.png', Image::WATER_SOUTHEAST)
       ->save('./result.jpg');

舊專案維護請參考本文;新專案建議升級至 ThinkPHP 5.0+ 或 Laravel,享受更現代的影像處理套件(如 intervention/image)。

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