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
Libérer: 2024-10-27 18:38:30
original
625 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!