Position actuelle: Accueil> Derniers articles> Combinant ImageFlip et exif_read_data pour obtenir la direction correcte de l'image Flip

Combinant ImageFlip et exif_read_data pour obtenir la direction correcte de l'image Flip

gitbox 2025-05-27

Lorsque nous travaillons avec des images, nous rencontrons parfois des problèmes avec une orientation incorrecte de l'image. Surtout lorsque vous prenez des photos avec un smartphone, les informations de direction de l'image sont souvent stockées dans les données EXIF. Afin d'afficher correctement l'image, nous devons ajuster l'orientation de l'image en fonction de ces informations. PHP fournit une fonction ImageFlip pour gérer les opérations de flip d'image, et il existe également une fonction exif_read_data qui peut lire les données EXIF ​​pour obtenir la direction de l'image. Cet article présentera comment combiner ces deux fonctions pour fixer la direction du retournement de l'image.

1. Informations de direction dans les données exif

EXIF (format de fichier image échangeable) fait partie du fichier image, qui contient une variété d'informations sur les conditions de prise de vue de l'image, les paramètres de la caméra, etc. Dans les images de format JPEG, les données EXIF ​​stocke généralement les informations de direction de l'image, en particulier dans la balise d'orientation . La valeur de l'orientation représente l'angle de rotation ou le retournement de l'image par rapport à la direction de prise de vue normale.

Les valeurs d'orientation courantes sont les suivantes:

  • 1: NORMAL (pas de rotation ou de retournement)

  • 3: tourner à 180 degrés

  • 6: faire tourner à 90 degrés dans le sens des aiguilles d'une montre

  • 8: Tournez à 90 degrés dans le sens antihoraire

  • 2: Flip vertical

  • 4: Flip horizontal

  • 5: retourner verticalement et tourner à 90 degrés dans le sens des aiguilles d'une montre

  • 7: Flip horizontalement et tourner à 90 degrés dans le sens des aiguilles d'une montre

Par conséquent, nous pouvons juger si l'image doit être retournée et comment retourner en fonction de la valeur d'orientation dans les données EXIF.

2. Utilisez exif_read_data pour lire les données EXIF

La fonction EXIF_READ_DATA peut lire les données EXIF ​​dans le fichier image. Nous pouvons obtenir des informations d'orientation via cette fonction pour juger de la direction de l'image.

Voici un exemple de code pour la lecture des données EXIF:

 <?php
$file = 'path/to/your/image.jpg';

// Vérifiez si le fichier existe
if (file_exists($file)) {
    // LireEXIFdonnées
    $exif = exif_read_data($file);

    // siEXIFdonnées包含OrientationChamps
    if (isset($exif['Orientation'])) {
        echo 'Orientation: ' . $exif['Orientation'];
    } else {
        echo 'Pas trouvéOrientationChamps';
    }
}
?>

Ce code lit les données EXIF ​​dans le fichier image et publie la valeur du champ d'orientation . Si ce champ n'existe pas dans les données EXIF, cela signifie que l'image ne contient pas d'informations de direction.

3. Utilisez la fonction ImageFlip pour corriger l'orientation de l'image

ImageFlip est une fonction de bibliothèque GD dans PHP qui peut être utilisée pour retourner les images. En fonction de la valeur d'orientation dans les données EXIF, nous pouvons décider comment utiliser ImageFlip pour corriger l'orientation de l'image.

Voici un exemple de code complet qui combine des fonctions EXIF_READ_DATA et ImageFlip pour corriger l'orientation de l'image:

 <?php
function fixImageOrientation($file) {
    // Vérifiez si le fichier existe
    if (file_exists($file)) {
        // Obtenir l&#39;imageEXIFdonnées
        $exif = exif_read_data($file);
        
        // siEXIFdonnées包含OrientationChamps
        if (isset($exif['Orientation'])) {
            // ObtenirOrientationValeur
            $orientation = $exif['Orientation'];
            
            // Chargement des images
            $image = imagecreatefromjpeg($file);

            // selonOrientationValeur pour corriger l&#39;orientation de l&#39;image
            switch ($orientation) {
                case 3:
                    // Tourner180Degré
                    imageflip($image, IMG_FLIP_BOTH);
                    break;
                case 6:
                    // 顺时针Tourner90Degré
                    $image = imagerotate($image, -90, 0);
                    break;
                case 8:
                    // 逆时针Tourner90Degré
                    $image = imagerotate($image, 90, 0);
                    break;
                case 2:
                    // Flip vertical
                    imageflip($image, IMG_FLIP_VERTICAL);
                    break;
                case 4:
                    // Flip horizontal
                    imageflip($image, IMG_FLIP_HORIZONTAL);
                    break;
                case 5:
                    // Flip vertical并Tourner90Degré顺时针
                    imageflip($image, IMG_FLIP_VERTICAL);
                    $image = imagerotate($image, -90, 0);
                    break;
                case 7:
                    // Flip horizontal并Tourner90Degré顺时针
                    imageflip($image, IMG_FLIP_HORIZONTAL);
                    $image = imagerotate($image, -90, 0);
                    break;
                default:
                    // Aucune réparation requise
                    break;
            }

            // Enregistrer l&#39;image réparée
            imagejpeg($image, 'path/to/save/fixed_image.jpg');

            // Mémoire d&#39;image gratuite
            imagedestroy($image);

            echo "La direction de l&#39;image est réparée avec succès!";
        } else {
            echo "NonOrientationChamps,Aucune réparation requise图片方向。";
        }
    } else {
        echo "Le fichier image n&#39;existe pas。";
    }
}

// Appel d&#39;une fonction pour fixer la direction de l&#39;image
fixImageOrientation('path/to/your/image.jpg');
?>

Dans ce code, lisez d'abord les données EXIF ​​de l'image via la fonction exif_read_data et obtenez la valeur du champ d'orientation . Ensuite, en fonction de cette valeur, déterminez comment utiliser ImageFlip et ImageroTate pour réparer l'orientation de l'image. L'image fixe sera enregistrée sur le chemin spécifié.