PHP에서 EXIF 데이터 읽기 및 이미지 방향 조정
문제:
업로드된 이미지 회전 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>
var_dump($exif) 출력은 iPhone 및 Android 이미지의 EXIF 데이터에 Orientation 필드가 있음을 나타냅니다.
해결책:
이 문제를 해결하려면 iPhone 및 Android에서 사용되는 특정 방향 값을 처리하도록 방향 수정 기능을 최적화해야 합니다.
다음은 GD를 사용하여 방향 수정 기능을 개선한 버전입니다.
<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>
이 기능을 사용하려면 저장하거나 표시하기 전에 이미지에 적용하기만 하면 됩니다.
<code class="php">image_fix_orientation($image, $upload_path . $newfilename); imagejpeg($image, $upload_path . $newfilename, 100);</code>
이제 이 최적화된 기능은 EXIF 방향 데이터를 기반으로 iPhone 및 Android의 이미지를 올바르게 회전해야 합니다. .
위 내용은 EXIF 데이터를 기반으로 이미지 회전이 iPhone 및 Android 장치에서 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!