PHP supprime l'orientation exif de l'image uniquement (sans utiliser imagick)
P粉141925181
P粉141925181 2024-03-27 09:27:01
0
1
465

J'ai écrit un script pour redimensionner par lots les images téléchargées localement et créer des vignettes. Le problème est que si certaines images sont orientées verticalement mais qu'après le redimensionnement, elles pivotent horizontalement.

Cela est dû à l'orientation exif de l'image. Existe-t-il un moyen simple de supprimer l'orientation exif d'une image via PHP ? Je sais qu'Imagick peut le faire, mais je ne peux/ne veux pas l'installer.

Y a-t-il une solution sans cela ?

Maintenant, je résous ce problème en ouvrant une telle image dans un éditeur d'images et en la réenregistrant sans conserver les informations exif. Ensuite, lorsque je redimensionne cette image dans le script, le résultat est correct.

Je veux donc simplement supprimer exif de l'image dans le script PHP avant de la redimensionner.

J'ai essayé une fonction qui vérifie la direction exif :

function removeExif($filename) {
    if (function_exists('exif_read_data')) {
      $exif = exif_read_data($filename);
      if($exif && isset($exif['Orientation'])) {
        $orientation = $exif['Orientation'];
        if($orientation != 1){

           // $img = new Imagick($filename);
           // $img->stripImage();
           // $img->writeImage($filename);

        } 
      } 
    } 
  }

J'ai donc juste besoin de remplacer la partie Imagick par autre chose sans installer de bibliothèques supplémentaires, peut-être en utilisant le GD déjà inclus ou quelque chose du genre.

P粉141925181
P粉141925181

répondre à tous(1)
P粉569205478

D'accord, j'ai donc décidé de faire pivoter l'image au lieu de supprimer l'exif, et cela a fini par avoir le même effet. Je vérifie donc quelle est la valeur d'orientation exif (le cas échéant), puis en fonction de cette valeur, j'utilise simplement imagerotate puis redimensionne l'image. Le résultat est parfait et aucune installation ni bibliothèque supplémentaire n’est requise.

function checkExif($filename) {
        if (function_exists('exif_read_data')) {
          $exif = exif_read_data($filename);
          if($exif && isset($exif['Orientation'])) {
            $orientation = $exif['Orientation'];
            if ($exif['Orientation']==3 OR $exif['Orientation']==6 OR $exif['Orientation']==8) {
                $imageResource = imagecreatefromjpeg($filename); 
                switch ($exif['Orientation']) { 
                case 3:
                $image = imagerotate($imageResource, 180, 0);
                break;
                case 6:
                $image = imagerotate($imageResource, -90, 0);
                break;
                case 8:
                $image = imagerotate($imageResource, 90, 0);
                break;
            } 
            imagejpeg($image, $filename);
            imagedestroy($imageResource);
            imagedestroy($image);
            }
          } 
        } 
      }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal