Maison >développement back-end >tutoriel php >Pourquoi la rotation des images basée sur les données EXIF ne fonctionne-t-elle pas sur les iPhones et les appareils Android ?
Lire les données EXIF et ajuster l'orientation de l'image en PHP
Problème :
Rotation des images téléchargées en fonction de leur orientation à l'aide des données EXIF ne fonctionne pas correctement pour les images des iPhones et Android.
Code :
Le code suivant tente de faire pivoter une image en fonction de son EXIF orientation :
<code class="php">if(move_uploaded_file($_FILES['photo']['tmp_name'], $upload_path . $newfilename)){ chmod($upload_path . $newfilename, 0755); $exif = exif_read_data($upload_path . $newfilename); $ort = $exif['IFD0']['Orientation']; switch($ort) { case 3: // 180 rotate left $image->imagerotate($upload_path . $newfilename, 180, -1); break; case 6: // 90 rotate right $image->imagerotate($upload_path . $newfilename, -90, -1); break; case 8: // 90 rotate left $image->imagerotate($upload_path . $newfilename, 90, -1); break; } imagejpeg($image, $upload_path . $newfilename, 100); $success_message = 'Photo Successfully Uploaded'; }else{ $error_count++; $error_message = 'Error: Upload Unsuccessful<br />Please Try Again'; }</code>
La sortie var_dump($exif) indique que le champ Orientation existe dans les données EXIF pour les images des iPhones et Android.
Solution :
Pour résoudre le problème, la fonction de correction d'orientation doit être optimisée pour gérer les valeurs d'orientation spécifiques utilisées par les iPhones et Android.
Voici une version améliorée de la fonction de correction d'orientation utilisant 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>
Pour utiliser la fonction, appliquez-la simplement à l'image avant de l'enregistrer ou de l'afficher :
<code class="php">image_fix_orientation($image, $upload_path . $newfilename); imagejpeg($image, $upload_path . $newfilename, 100);</code>
Cette fonction optimisée devrait désormais faire pivoter correctement les images des iPhones et Android en fonction de leurs données d'orientation EXIF. .
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!