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 現包含正確方向的圖像資源,可進一步保存或輸出
?>
經測試,主流 Android 設備拍照生成的 Orientation 多為 1(正常方向),故通常無需旋轉。但為兼容性起見,建議統一接入修正邏輯。
exif_imagetype() 先判斷是否 JPEG 格式(僅 JPEG 支持 Orientation)getimagesize() 獲取尺寸,避免重複讀取文件此方案已在多個項目驗證,有效解決移動端上傳圖片「躺著看」的經典問題。