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

PHP GD 庫實現圖片旋轉 90 度(含多格式支援)

     編輯:PHP 相關知識

利用 GD 库的 imagerotate() 可輕松實現圖片任意角度旋轉。本文封裝通用函數,自動識別 JPEG/PNG/GIF 格式並保持高質量輸出。

通用旋轉函數

<?php
/**
 * 旋轉圖片指定角度
 * @param string $filename 源文件路徑
 * @param string $src      目標保存路徑
 * @param float  $degrees  旋轉角度(默認 90°)
 * @return bool
 */
function flip($filename, $src, $degrees = 90) {
    // 1. 獲取圖片信息
    $data = @getimagesize($filename);
    if ($data === false) return false;

    // 2. 根據類型創建圖片資源
    switch ($data[2]) {
        case IMAGETYPE_GIF:  $src_f = imagecreatefromgif($filename);  break;
        case IMAGETYPE_JPEG: $src_f = imagecreatefromjpeg($filename); break;
        case IMAGETYPE_PNG:  $src_f = imagecreatefrompng($filename);  break;
        default: return false;
    }
    if (!$src_f) return false;

    // 3. 旋轉(背景色 0 = 黑色透明)
    $rotate = @imagerotate($src_f, $degrees, 0);
    if (!$rotate) {
        imagedestroy($src_f);
        return false;
    }

    // 4. 保存為 JPEG(質量 100)
    $result = imagejpeg($rotate, $src, 100);

    // 5. 清理資源
    imagedestroy($rotate);
    imagedestroy($src_f);

    return $result;
}
?>

使用示例

<?php
// 將 photo.jpg 順時針旋轉 90° 保存為 photo_rotated.jpg
flip('uploads/photo.jpg', 'uploads/photo_rotated.jpg', 90);

// 旋轉 180°
flip('uploads/photo.jpg', 'uploads/photo_180.jpg', 180);

// 旋轉 270°(等價於逆時針 90°)
flip('uploads/photo.jpg', 'uploads/photo_270.jpg', 270);
?>

關鍵點說明

  • 常量替代魔術數字:用 IMAGETYPE_* 代替 1/2/3,可讀性強
  • 背景色參數:imagerotate($src, $deg, 0) 第三參數為旋轉後露出區域的填充色(RGB 整數),0 為黑色
  • 質量控制:imagejpeg($im, $file, 100) 最後參數 0-100,建議 90-100 平衡體積/質量
  • 資源釋放:雙重 imagedestroy() 防止內存洩漏,長時間運行腳本必須
  • 透明度保持:PNG/GIF 旋轉後透明區可能變黑,需額外處理 imagesavealpha() + imagecolortransparent()

進階:保持 PNG 透明度

function flip_png_transparent($src, $dst, $deg = 90) {
    $im = imagecreatefrompng($src);
    $rot = imagerotate($im, $deg, -1); // -1 保持透明
    imagesavealpha($rot, true);
    imagepng($rot, $dst, 9); // 壓縮級別 9
    imagedestroy($im);
    imagedestroy($rot);
}

GD 庫旋轉操作屬 CPU 密集型,大批量處理建議異步隊列或使用 ImageMagick (imagick 擴展) 性能更優。

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