PHP lit les données EXIF et ajuste l'orientation de l'image
Lors du téléchargement d'images, en particulier à partir d'appareils mobiles, il est crucial de s'assurer que leur orientation est correcte. Ceci est réalisé en lisant les données EXIF et en manipulant l'image en conséquence.
Lecture des données EXIF
La fonction exif_read_data() est utilisée pour lire les informations EXIF à partir du fichier téléchargé. Image JPEG. Par exemple :
<code class="php">$exif = exif_read_data($upload_path . $newfilename);</code>
Le résultat, stocké dans $exif, contient diverses informations, notamment des données d'orientation.
Ajustement de l'orientation
Pour corriger l'orientation, inspectez le champ Orientation des données EXIF. Les valeurs courantes incluent :
En fonction de la valeur d'orientation, appliquez la transformation appropriée à l'aide de fonctions de manipulation d'image telles que imagerotate() ou rotateImage().
Résolution des problèmes courants liés aux images iPhone et Android
Votre code peut rencontrer des problèmes avec les images des iPhones et des appareils Android, car ils intègrent souvent des données EXIF de manière non standard. Pour résoudre ce problème, pensez à utiliser les fonctions GD ou ImageMagick pour la correction de l'orientation.
Fonction GD
<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>
Fonction 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>
Ces fonctions ajustent l'orientation de l'image sans rééchantillonnage, préservant ainsi la qualité de l'image.
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!