在PHP 中讀取EXIF 資料並調整影像方向
問題:
問題:旋轉上傳的映像檔對於來自iPhone 和Android 的映像,基於方向使用EXIF 資料無法正常運作。
程式碼:<code class="php">if(move_uploaded_file($_FILES['photo']['tmp_name'], $upload_path . $newfilename)){ chmod($upload_path . $newfilename, 0755); $exif = exif_read_data($upload_path . $newfilename); $ort = $exif['IFD0']['Orientation']; switch($ort) { case 3: // 180 rotate left $image->imagerotate($upload_path . $newfilename, 180, -1); break; case 6: // 90 rotate right $image->imagerotate($upload_path . $newfilename, -90, -1); break; case 8: // 90 rotate left $image->imagerotate($upload_path . $newfilename, 90, -1); break; } imagejpeg($image, $upload_path . $newfilename, 100); $success_message = 'Photo Successfully Uploaded'; }else{ $error_count++; $error_message = 'Error: Upload Unsuccessful<br />Please Try Again'; }</code>以下程式碼嘗試根據其EXIF 旋轉影像方向:
var_dump($exif) 輸出顯示iPhone 和Android 圖像的EXIF 資料中存在Orientation 欄位。
解決方案:
<code class="php">function image_fix_orientation(&$image, $filename) { $exif = exif_read_data($filename); if (!empty($exif['Orientation'])) { switch ($exif['Orientation']) { case 3: $image = imagerotate($image, 180, 0); break; case 6: $image = imagerotate($image, 90, 0); break; case 8: $image = imagerotate($image, -90, 0); break; } } }</code>要解決此問題,必須最佳化方向校正函數以處理 iPhone 和 Android 使用的特定方向值。 這是使用GD 的方向校正函數的改進版本:
<code class="php">image_fix_orientation($image, $upload_path . $newfilename); imagejpeg($image, $upload_path . $newfilename, 100);</code>要使用該功能,只需在保存或顯示之前將其應用於圖像即可: 此最佳化功能現在應該根據iPhone 和Android 的EXIF 方向資料正確旋轉影像.
以上是為什麼基於 EXIF 資料的旋轉影像不適用於 iPhone 和 Android 裝置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!