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

PHP 圖片等比例縮放生成縮略圖函數(支援 JPG/PNG/GIF)

     編輯:PHP 綜合知識

封裝一個通用的縮略圖生成函數,支援指定目標寬高、自動計算縮放比例、保持原圖比例、多格式輸出。

函數簽名

function makethumb($im, $dstimW, $dstimH, $thumbname, $filetype)
  • $im:GD 圖片資源(已由 imagecreatefromjpeg/png/gif 建立)。
  • $dstimW、$dstimH:目標最大寬高。
  • $thumbname:輸出文件名(不含副檔名)。
  • $filetype:jpg、png、gif。

核心邏輯

  1. 獲取原圖寬高 imagesx/y。
  2. 若目標尺寸小於原圖,計算寬高縮放比,取較小者為最終比例(確保完整顯示)。
  3. 使用 imagecreatetruecolor + imagecopyresampled 高質量重採樣;若不存在則退回 imagecopyresized。
  4. 根據 $filetype 調用對應輸出函數(imagejpeg/png/gif)。
  5. 銷毀資源 imagedestroy。

完整代碼(修正原文變量拼寫錯誤)

<?php
function makethumb($im, $dstW, $dstH, $thumbname, $filetype) {
    $srcW = imagesx($im);
    $srcH = imagesy($im);

    $funcMap = [
        'jpg'  => 'imagejpeg',
        'jpeg' => 'imagejpeg',
        'png'  => 'imagepng',
        'gif'  => 'imagegif',
    ];
    if (!isset($funcMap[$filetype])) return false;

    // 無需縮放
    if ($dstW >= $srcW && $dstH >= $srcH) {
        $funcMap[$filetype]($im, "{$thumbname}.{$filetype}");
        return true;
    }

    // 計算縮放比
    $ratioW = $dstW / $srcW;
    $ratioH = $dstH / $srcH;
    $ratio  = min($ratioW, $ratioH);

    $newW = (int)($srcW * $ratio);
    $newH = (int)($srcH * $ratio);

    $dst = imagecreatetruecolor($newW, $newH);
    // 保持 PNG/GIF 透明度
    if ($filetype === 'png' || $filetype === 'gif') {
        imagealphablending($dst, false);
        imagesavealpha($dst, true);
    }
    imagecopyresampled($dst, $im, 0, 0, 0, 0, $newW, $newH, $srcW, $srcH);

    $funcMap[$filetype]($dst, "{$thumbname}.{$filetype}");
    imagedestroy($dst);
    return true;
}

使用範例

$src = 'photo.jpg';
$im  = imagecreatefromjpeg($src);
makethumb($im, 300, 200, 'thumb_photo', 'jpg');
imagedestroy($im);

注意事項

  • 輸出目錄需可寫權限。
  • 大圖處理前建議 ini_set('memory_limit', '256M')。
  • 生產環境可結合 Intervention Image 或 Imagine 庫簡化操作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved