Maison  >  Article  >  développement back-end  >  Pourquoi la rotation des images basée sur les données EXIF ​​ne fonctionne-t-elle pas sur les iPhones et les appareils Android ?

Pourquoi la rotation des images basée sur les données EXIF ​​ne fonctionne-t-elle pas sur les iPhones et les appareils Android ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 18:38:30625parcourir

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

Lire les données EXIF ​​et ajuster l'orientation de l'image en PHP

Problème :

Rotation des images téléchargées en fonction de leur orientation à l'aide des données EXIF ​​ne fonctionne pas correctement pour les images des iPhones et Android.

Code :

Le code suivant tente de faire pivoter une image en fonction de son 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>

La sortie var_dump($exif) indique que le champ Orientation existe dans les données EXIF ​​pour les images des iPhones et Android.

Solution :

Pour résoudre le problème, la fonction de correction d'orientation doit être optimisée pour gérer les valeurs d'orientation spécifiques utilisées par les iPhones et Android.

Voici une version améliorée de la fonction de correction d'orientation utilisant 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>

Pour utiliser la fonction, appliquez-la simplement à l'image avant de l'enregistrer ou de l'afficher :

<code class="php">image_fix_orientation($image, $upload_path . $newfilename);
imagejpeg($image, $upload_path . $newfilename, 100);</code>

Cette fonction optimisée devrait désormais faire pivoter correctement les images des iPhones et Android en fonction de leurs données d'orientation EXIF. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn