Read EXIF Data and Adjust Image Orientation in PHP
Problem:
Rotating uploaded images based on their orientation using EXIF data is not working correctly for images from iPhones and Android.
Code:
The following code attempts to rotate an image based on its EXIF orientation:
<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>
The var_dump($exif) output indicates that the Orientation field exists in the EXIF data for the images from iPhones and Android.
Solution:
To resolve the issue, the orientation correction function must be optimized to handle the specific orientation values used by iPhones and Android.
Here's an improved version of the orientation correction function using 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>
To use the function, simply apply it to the image before saving or displaying:
<code class="php">image_fix_orientation($image, $upload_path . $newfilename); imagejpeg($image, $upload_path . $newfilename, 100);</code>
This optimized function should now rotate images from iPhones and Android correctly based on their EXIF orientation data.
The above is the detailed content of Why is rotating images based on EXIF data not working for iPhones and Android devices?. For more information, please follow other related articles on the PHP Chinese website!