Lorsque vous utilisez exif_read_data pour faire pivoter les images JPEG téléchargées en fonction de leur orientation, il est important d'interpréter correctement les données. Dans le code fourni, l'orientation est lue mais pas appliquée avec précision.
Les données EXIF sont extraites à l'aide de exif_read_data($upload_path . $newfilename), qui renvoie un tableau avec diverses métadonnées. La clé « Orientation » contient la valeur indiquant l'orientation de l'image.
Pour corriger la rotation, utilisez l'instruction switch suivante en fonction de la valeur « Orientation » :
<code class="php">switch($ort) { case 3: // Rotate 180 degrees left $image->imagerotate($upload_path . $newfilename, 180, -1); break; case 6: // Rotate 90 degrees right $image->imagerotate($upload_path . $newfilename, -90, -1); break; case 8: // Rotate 90 degrees left $image->imagerotate($upload_path . $newfilename, 90, -1); break; }</code>
Vous pouvez également considérer ces fonctions optimisées pour l'ajustement de l'orientation :
Cette fonction fait pivoter l'image sans rééchantillonnage :
<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>
<code class="php">function image_fix_orientation(&$image, $filename) { $image = imagerotate($image, array_values([0, 0, 0, 180, 0, 0, -90, 0, 90])[@exif_read_data($filename)['Orientation'] ?: 0], 0); }</code>
Cette fonction gère l'image orientation dans 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>
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!