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

PHP 智能修正圖片方向:基於 EXIF Orientation 標籤的自動旋轉方案

     編輯:PHP 相關知識

PHP 智能修正圖片方向:基於 EXIF Orientation 標籤的自動旋轉方案

iOS 設備拍照時會將方向信息寫入 EXIF 的 Orientation 標籤,而非實際旋轉像素數據。導致在不支持 EXIF 的環境中顯示偏轉。本文提供基於 GD 庫的自動修正方案。

核心修正代碼

<?php
// 從上傳文件創建圖像資源
$image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name']));

// 讀取 EXIF 信息
$exif = exif_read_data($_FILES['image_upload']['tmp_name']);

if (!empty($exif['Orientation'])) {
    switch ($exif['Orientation']) {
        case 8:  // 逆時針 90°
            $image = imagerotate($image, 90, 0);
            break;
        case 3:  // 180°
            $image = imagerotate($image, 180, 0);
            break;
        case 6:  // 順時針 90°
            $image = imagerotate($image, -90, 0);
            break;
        // Orientation 1 為正常,無需處理
    }
}

// $image 現包含正確方向的圖像資源,可進一步保存或輸出
?>

關鍵點解析

  • Orientation 值對照:1=正常、3=180°、6=順時針90°、8=逆時針90°(其他值涉及鏡像翻轉,較少見)
  • imagerotate 參數:角度為正時逆時針旋轉,背景色用 0(黑色)填充透明區域
  • 內存考量:大圖旋轉消耗較大內存,生產環境建議配合分塊處理或使用 Imagick 擴展

Android 設備兼容性說明

經測試,主流 Android 設備拍照生成的 Orientation 多為 1(正常方向),故通常無需旋轉。但為兼容性起見,建議統一接入修正邏輯。

進階優化建議

  1. 使用 exif_imagetype() 先判斷是否 JPEG 格式(僅 JPEG 支持 Orientation)
  2. 結合 getimagesize() 獲取尺寸,避免重複讀取文件
  3. 生產環境優先考慮 Imagick 擴展,性能更優且支持更多格式
  4. 上傳後異步處理旋轉,提升用戶響應速度

此方案已在多個項目驗證,有效解決移動端上傳圖片「躺著看」的經典問題。

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