Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dimension image

    24 mars 2017 à 11:37:43

    Bonjour,

    je souhaite connaître si une image est en format paysage ou portrait

    et j'utilise pour cela les fonctions imagesx() et imagesy() qui  renvoient soit disant la largeur et la hauteur d'une image

    sauf que lorsque je les applique à des photos prises depuis mon téléphone portable,

    imagesx() me renvoie systématiquement la plus grande dimension,

    donc la largeur si la photo est en paysage

    mais la hauteur si la photo est en portrait

    Il semble qu'il agisse comme si l'image était toujours en format paysage

    Je comptais écrire quelque chose comme :

    $largeur_source = imagesx($source);
    $hauteur_source = imagesy($source);

    if ($largeur_source >$hauteur_source )

    {

       echo "Vous êtes en format paysage";

    }

    else

    {

       echo "Vous êtes en format portrait";

    }

    Mais du coup, il m'affiche toujours que je suis en format paysage, alors que c'est faux :

    ma photo prrise depuis mon téléphone et transférée ensuite sur mon ordi est bien en format portrait,

    et quand je regarde les propriétés de la photo, on m'indique bien Largeur = 1536 px et Hauteur =2560 px...

    J'ai ensuite essayé autrement, avec la fonction getimagesize(), en écrivant :

         $taillesource = getimagesize ('nom de mon image source');
         $largeur_source = $taillesource[0];
         $hauteur_source = $taillesource[1];

    Mais là encore, le problème reste identique :

    $taillesource[0] ne me renvoie pas la largeur et $taillesource[1] la hauteur comme prévu...

    Mais $taillesource[0] me renvoie la plus grande dimension, comme imagesx()...

    Du coup, je ne sais pas comment faire...

    Merci par avance de votre aide...

    Je vous souhaite une très belle journée,

    cordialement

    Christophe

    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2017 à 11:50:06

      Salut, 

      Tu peux t'aider de la fonction exif_read_data() qui permet de lire les headers EXIF des images .jpg et .tiff

      Tu trouveras un exemple de l'implémentation ici : http://stackoverflow.com/questions/22308921/fix-ios-picture-orientation-after-upload-php#answer-22506787

      Je t'invite également à visiter le lien qu'il ajoute à la fin de son poste pour mieux comprendre la problématique : http://www.impulseadventure.com/photo/exif-orientation.html 

      Bonne lecture et bon courage :p 

      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2017 à 13:28:49

        Merci,

        j'ai recopié et écrit  :

        $source = imagecreatefromjpeg('nom de ma photo'); // La photo source

        $exif = exif_read_data('nom de ma photo');
             if (isset($exif['Orientation']))
             {
               switch ($exif['Orientation'])
               {
                 case 3:
                 // Need to rotate 180 deg
                 $degres = 180;       
                 $rotate = imagerotate($source,$degres, 0);
                 break;

                 case 6:
                 // Need to rotate 90 deg clockwise 
                 $degres =-90;      
                 $rotate = imagerotate($source,$degres, 0);
                 break;

                 case 8:
                 // Need to rotate 90 deg counter clockwise
                 $degres =90;
                 $rotate = imagerotate($source,$degres, 0);
              break;
               }
             }
             

        Mais j'ai le message d'erreur suivant:

        Fatal error: Call to undefined function  imagerotate() in C:\wamp64\www\

        et il m'indique la ligne en gras...

        Je ne comprends pas

        • Partager sur Facebook
        • Partager sur Twitter
          25 mars 2017 à 14:09:00

          Bonjour,

          je persiste à ne pas comprendre,

          car la fonction imagerotate() est censée fonctionner : http://www.php.net/manual/fr/function.imagerotate.php
          D'autant que la librairie gd est installée, et beaucoup d'autres fonctions provenant de cette librairie fonctionnent très bien...

          est-ce que quelqu'un peut m'aider ?

          Merci d'avance,

          Cordialement

          Christophe

          • Partager sur Facebook
          • Partager sur Twitter
            25 mars 2017 à 18:23:45

            Hello Christophe,

            En me renseignant un peu de ce côté là, tu dois tourner sous Ubuntu et d'après les docs :

            So, If you are running Ubuntu and wonder why you get "Call to undefined function imagerotate()" even though you seemingly have the correct GD lib installed, this is why. Use the alternative supplied by beau at dragonflydevelopment dot com instead. It works flawlessly (for angles in steps of 90 degrees).

            Du coup, tu peux dupliquer la fonction dans ton document pour être sûr d'appeler la fonction imagerotate() et qu'elle fonctionne :

            if (!function_exists('imagerotate')) {
            
                /*
                    Imagerotate replacement. ignore_transparent is work for png images
                    Also, have some standard functions for 90, 180 and 270 degrees.
                    Rotation is clockwise
                */
            
                function imagerotate_rotateX($x, $y, $theta) {
                    return $x * cos($theta) - $y * sin($theta);
                }
            
                function imagerotate_rotateY($x, $y, $theta) {
                    return $x * sin($theta) + $y * cos($theta);
                }
            
                function imagerotate($srcImg, $angle, $bgcolor = 0, $ignore_transparent = 0) {
                    $srcw = imagesx($srcImg);
                    $srch = imagesy($srcImg);
            
                    //Normalize angle
                    $angle %= 360;
                    //Set rotate to clockwise
                    $angle = -$angle;
            
                    if ($angle == 0) {
                        if ($ignore_transparent == 0) {
                            imagesavealpha($srcImg, true);
                        }
                        return $srcImg;
                    }
            
                    // Convert the angle to radians
                    $theta = deg2rad($angle);
            
                    //Standart case of rotate
                    if ((abs($angle) == 90) || (abs($angle) == 270)) {
                        $width = $srch;
                        $height = $srcw;
                        if (($angle == 90) || ($angle == -270)) {
                            $minX = 0;
                            $maxX = $width;
                            $minY = -$height+1;
                            $maxY = 1;
                        } else if (($angle == -90) || ($angle == 270)) {
                            $minX = -$width+1;
                            $maxX = 1;
                            $minY = 0;
                            $maxY = $height;
                        }
                    } else if (abs($angle) === 180) {
                        $width = $srcw;
                        $height = $srch;
                        $minX = -$width+1;
                        $maxX = 1;
                        $minY = -$height+1;
                        $maxY = 1;
                    } else {
                        // Calculate the width of the destination image.
                        $temp = array(
                            imagerotate_rotateX(0, 0, 0 - $theta),
                            imagerotate_rotateX($srcw, 0, 0 - $theta),
                            imagerotate_rotateX(0, $srch, 0 - $theta),
                            imagerotate_rotateX($srcw, $srch, 0 - $theta)
                        );
                        $minX = floor(min($temp));
                        $maxX = ceil(max($temp));
                        $width = $maxX - $minX;
            
                        // Calculate the height of the destination image.
                        $temp = array(
                            imagerotate_rotateY(0, 0, 0 - $theta),
                            imagerotate_rotateY($srcw, 0, 0 - $theta),
                            imagerotate_rotateY(0, $srch, 0 - $theta),
                            imagerotate_rotateY($srcw, $srch, 0 - $theta)
                        );
                        $minY = floor(min($temp));
                        $maxY = ceil(max($temp));
                        $height = $maxY - $minY;
                    }
            
                    $destimg = imagecreatetruecolor($width, $height);
                    if ($ignore_transparent == 0) {
                        imagefill($destimg, 0, 0, imagecolorallocatealpha($destimg, 255,255, 255, 127));
                        imagesavealpha($destimg, true);
                    }
            
                    // sets all pixels in the new image
                    for ($x = $minX; $x < $maxX; $x++) {
                        for ($y = $minY; $y < $maxY; $y++) {
                            // fetch corresponding pixel from the source image
                            $srcX = round(imagerotate_rotateX($x, $y, $theta));
                            $srcY = round(imagerotate_rotateY($x, $y, $theta));
                            if ($srcX >= 0 && $srcX < $srcw && $srcY >= 0 && $srcY < $srch) {
                                $color = imagecolorat($srcImg, $srcX, $srcY);
                            } else {
                                $color = $bgcolor;
                            }
                            imagesetpixel($destimg, $x-$minX, $y-$minY, $color);
                        }
                    }
            
                    return $destimg;
                }
            
            }

            Bon courage ;)

            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2017 à 10:26:31

              Merci beaucoup,

              j'ai essayé ce script en effet,

              en ajoutant un else, au cas où la fonction imagerotate() existerait bien...

              j'ai écrit :

              $degres = 180; 
              //Si la fonction imagerotate() n'existe pas:
                    if (!function_exists('imagerotate'))
                    {
                     //J'inclus ici le script en question que j'ai enregistré dans le fichier 'modele/site/fonction_rotation_image.php' :
                     include_once('modele/site/fonction_rotation_image.php');
                     $rotat = imagerotate($source,$degres, 0,0);
                    }
                    else
                    {
                     $rotat = imagerotate($source,$degres, 0,0);
                    }

              Et je reçois à nouveau le message d'erreur suivant :

              Fatal error: Call to undefined function  imagerotate() in C:\wamp64\www\

              la cible de l'erreur étant la ligne en gras

              ce qui prouve a priori que la fonction imagerotate() existe...

              mais alors, pourquoi dit-il que j'appelle la fonction indéfinie imagerotate() ?

              Peut-être que je l'utilise mal ?

              Merci par avance de votre aide, je suis coincé...

              Bonne journée,

              Cordialement

              Christophe

              • Partager sur Facebook
              • Partager sur Twitter
                27 mars 2017 à 18:19:56

                D'après le manuel :

                Note : Cette fonction n'est disponible que si PHP est compilé avec la version embarquée de la bibliothèque GD.

                Tu n'as peut être pas compilé PHP avec GD, dans ces cas là, ouvre ton terminal et tape dans /usr/src :

                apt-src install php

                Tu es bien sur Ubuntu ? Sinon tu as bien activé la librairie GD sur Wamp ?

                -
                Edité par alloalix 27 mars 2017 à 18:20:46

                • Partager sur Facebook
                • Partager sur Twitter

                Dimension image

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown