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

PHP GD 等比例縮放壓縮圖片函數:支援 JPEG/PNG/GIF、動圖檢測

     編輯:PHP 綜合知識

函數功能

  • 自動偵測圖片類型(JPEG/PNG/GIF)
  • 等比例縮放,長邊限制 600px 並再縮 0.9 倍
  • GIF 動圖檢測:靜態圖處理,動圖跳過避免幀丟失
  • 品質參數 75 平衡體積與清晰度

核心代碼

function check_gif_cartoon($file) {
    $fp = fopen($file, 'rb');
    $head = fread($fp, 1024);
    fclose($fp);
    // 檢查 NETSCAPE2.0 標識
    return preg_match("/\x21\xff\x0bNETSCAPE2.0/", $head) ? false : true;
}

function compress_image($src, $dst) {
    list($w, $h, $type) = getimagesize($src);
    $nw = ($w > 600 ? 600 : $w) * 0.9;
    $nh = ($h > 600 ? 600 : $h) * 0.9;

    switch ($type) {
        case IMAGETYPE_GIF:
            if (!check_gif_cartoon($src)) break; // 動圖不處理
            $srcImg = imagecreatefromgif($src);
            $dstImg = imagecreatetruecolor($nw, $nh);
            imagecopyresampled($dstImg, $srcImg, 0,0, 0,0, $nw,$nh, $w,$h);
            imagejpeg($dstImg, $dst, 75);
            break;

        case IMAGETYPE_JPEG:
            $srcImg = imagecreatefromjpeg($src);
            $dstImg = imagecreatetruecolor($nw, $nh);
            imagecopyresampled($dstImg, $srcImg, 0,0, 0,0, $nw,$nh, $w,$h);
            imagejpeg($dstImg, $dst, 75);
            break;

        case IMAGETYPE_PNG:
            $srcImg = imagecreatefrompng($src);
            $dstImg = imagecreatetruecolor($nw, $nh);
            // 保留透明度
            imagealphablending($dstImg, false);
            imagesavealpha($dstImg, true);
            imagecopyresampled($dstImg, $srcImg, 0,0, 0,0, $nw,$nh, $w,$h);
            imagepng($dstImg, $dst);
            break;
    }
    imagedestroy($dstImg);
    imagedestroy($srcImg);
}

GD 圖片函數分類速查

分類代表函數
資訊獲取getimagesize、gd_info、imagetypes
建立/載入imagecreate、imagecreatetruecolor、imagecreatefromjpeg/png/gif/webp
輸出imagejpeg、imagepng、imagegif、imagewebp、imagewbmp
複製/縮放imagecopy、imagecopyresampled、imagecopyresized、imagescale
繪圖imageline、imagerectangle、imageellipse、imagepolygon、imagettftext
顏色/透明imagecolorallocate、imagecolortransparent、imagesavealpha、imagealphablending
濾鏡/效果imagefilter、imageflip、imageconvolution
資源釋放imagedestroy

進階建議

  • PNG 透明度處理需 imagealphablending(false) + imagesavealpha(true)
  • 大量處理建議使用 Imagick 擴充,效能與功能更強
  • 上傳前驗證 MIME、副檔名、檔案大小,防惡意檔案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved