Why is rotating images based on EXIF data not working for iPhones and Android devices?

Mary-Kate Olsen
Release: 2024-10-27 18:38:30
Original
625 people have browsed it

Why is rotating images based on EXIF data not working for iPhones and Android devices?

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>
Copy after login

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(&amp;$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>
Copy after login

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>
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!