[PHP] Recadrage des images en conservant le bon format portrait/paysage

Il n'est pas rare de rencontrer des images qui, lorsqu'on les recadres avec la librairie GD, ressortent avec une rotation de -90° à 180°

Ce phénomène apparaît sur les photos prises avec un mobile ou une tablette, l'orientation de l'appareil n'ayant plus d'importance grâce au gyroscope.

Une image au format portrait peut donc avoir une taille de 1204x768 au lieu de 768x1024 !

Heureusement un paramètre est défini dans les métadonnées des images : l'orientation.

Pour être sûr de toujours avoir la bonne orientation, il suffit d'appliquer ce bout de code avant de recadrer une image :

    try {

        $image = '';     // Resource de l'image
        $imagePath = ''; // Chemin de l'image

        $angle = null;
        $meta = exif_read_data($imagePath);

        switch (isset($meta['Orientation']) ? $meta['Orientation'] : null) {

            //case \Imagick::ORIENTATION_BOTTOMRIGHT:
            case 3:

                $angle = 180;
                break;

            //case \Imagick::ORIENTATION_RIGHTTOP:
            case 6:

                $angle = -90;
                break;

            //case \Imagick::ORIENTATION_LEFTBOTTOM:
            case 8:

                $angle = 90;
                break;
        }

        if (!is_null($angle)) {

            $image = imagerotate($image, $angle, 0);
        }

    } catch(\Exception $e) {

        // Log des erreurs
    }

© Johnstyle 2017 • All rights reserved.