Maison  >  Article  >  développement back-end  >  Comment corriger l'orientation de l'image lors du téléchargement d'images à partir d'appareils mobiles ?

Comment corriger l'orientation de l'image lors du téléchargement d'images à partir d'appareils mobiles ?

DDD
DDDoriginal
2024-11-03 05:37:02122parcourir

How to Correct Image Orientation When Uploading Images from Mobile Devices?

PHP lit les données EXIF ​​et ajuste l'orientation de l'image

Lors du téléchargement d'images, en particulier à partir d'appareils mobiles, il est crucial de s'assurer que leur orientation est correcte. Ceci est réalisé en lisant les données EXIF ​​et en manipulant l'image en conséquence.

Lecture des données EXIF

La fonction exif_read_data() est utilisée pour lire les informations EXIF ​​à partir du fichier téléchargé. Image JPEG. Par exemple :

<code class="php">$exif = exif_read_data($upload_path . $newfilename);</code>

Le résultat, stocké dans $exif, contient diverses informations, notamment des données d'orientation.

Ajustement de l'orientation

Pour corriger l'orientation, inspectez le champ Orientation des données EXIF. Les valeurs courantes incluent :

  • 3 : Rotation de 180 degrés dans le sens inverse des aiguilles d'une montre
  • 6 : Rotation de 90 degrés dans le sens des aiguilles d'une montre
  • 8 : Rotation de 90 degrés dans le sens inverse des aiguilles d'une montre

En fonction de la valeur d'orientation, appliquez la transformation appropriée à l'aide de fonctions de manipulation d'image telles que imagerotate() ou rotateImage().

Résolution des problèmes courants liés aux images iPhone et Android

Votre code peut rencontrer des problèmes avec les images des iPhones et des appareils Android, car ils intègrent souvent des données EXIF ​​​​de manière non standard. Pour résoudre ce problème, pensez à utiliser les fonctions GD ou ImageMagick pour la correction de l'orientation.

Fonction 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>

Fonction ImageMagick

<code class="php">function image_fix_orientation($image) {
    if (method_exists($image, 'getImageProperty')) {
        $orientation = $image->getImageProperty('exif:Orientation');
    } else {
        $filename = $image->getImageFilename();

        if (empty($filename)) {
            $filename = 'data://image/jpeg;base64,' . base64_encode($image->getImageBlob());
        }

        $exif = exif_read_data($filename);
        $orientation = isset($exif['Orientation']) ? $exif['Orientation'] : null;
    }

    if (!empty($orientation)) {
        switch ($orientation) {
            case 3:
                $image->rotateImage('#000000', 180);
                break;

            case 6:
                $image->rotateImage('#000000', 90);
                break;

            case 8:
                $image->rotateImage('#000000', -90);
                break;
        }
    }
}</code>

Ces fonctions ajustent l'orientation de l'image sans rééchantillonnage, préservant ainsi la qualité de l'image.

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