Maison > Questions et réponses > le corps du texte
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粉5692054782024-03-28 00:52:35
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); } } } }