Home  >  Article  >  Backend Development  >  Why is rotating images based on EXIF data not working for iPhones and Android devices?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 18:38:30625browse

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>

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>

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!

Statement:
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