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
Libérer: 2024-10-31 14:28:02
original
847 Les gens l'ont consulté

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

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

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

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

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