Maison >développement back-end >tutoriel php >Comment faire pivoter correctement les images téléchargées en fonction de l'orientation EXIF ​​à l'aide de PHP ?

Comment faire pivoter correctement les images téléchargées en fonction de l'orientation EXIF ​​à l'aide de PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 14:28:02886parcourir

How to Correctly Rotate Uploaded Images Based on EXIF Orientation using PHP?

PHP read_exif_data et ajuster l'orientation

Lorsque vous utilisez exif_read_data pour faire pivoter les images JPEG téléchargées en fonction de leur orientation, il est important d'interpréter correctement les données. Dans le code fourni, l'orientation est lue mais pas appliquée avec précision.

Lecture des données EXIF

Les données EXIF ​​sont extraites à l'aide de exif_read_data($upload_path . $newfilename), qui renvoie un tableau avec diverses métadonnées. La clé « Orientation » contient la valeur indiquant l'orientation de l'image.

Ajustement de l'orientation

Pour corriger la rotation, utilisez l'instruction switch suivante en fonction de la valeur « Orientation » :

<code class="php">switch($ort)
{
    case 3: // Rotate 180 degrees left
        $image->imagerotate($upload_path . $newfilename, 180, -1);
        break;

    case 6: // Rotate 90 degrees right
        $image->imagerotate($upload_path . $newfilename, -90, -1);
        break;

    case 8: // Rotate 90 degrees left
        $image->imagerotate($upload_path . $newfilename, 90, -1);
        break;
}</code>

Vous pouvez également considérer ces fonctions optimisées pour l'ajustement de l'orientation :

GD Fonction

Cette fonction fait pivoter l'image sans rééchantillonnage :

<code class="php">function image_fix_orientation(&$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>

Version GD sur une ligne

<code class="php">function image_fix_orientation(&$image, $filename) {
    $image = imagerotate($image, array_values([0, 0, 0, 180, 0, 0, -90, 0, 90])[@exif_read_data($filename)['Orientation'] ?: 0], 0);
}</code>

Fonction ImageMagick

Cette fonction gère l'image orientation dans 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>

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