Apabila menggunakan exif_read_data untuk memutar imej jpeg yang dimuat naik berdasarkan orientasinya, adalah penting untuk mentafsir data dengan betul. Dalam kod yang disediakan, orientasi sedang dibaca tetapi tidak digunakan dengan tepat.
Data EXIF diekstrak menggunakan exif_read_data($upload_path . $newfilename), yang mengembalikan tatasusunan dengan pelbagai metadata. Kekunci "Orientasi" memegang nilai yang menunjukkan orientasi imej.
Untuk membetulkan putaran, gunakan pernyataan suis berikut mengikut nilai "Orientasi":
<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>
Sebagai alternatif, pertimbangkan fungsi yang dioptimumkan ini untuk pelarasan orientasi:
Fungsi ini memutar imej tanpa pensampelan semula:
<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>
Fungsi ini mengendalikan orientasi imej dalam 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>
Atas ialah kandungan terperinci Bagaimana untuk Memutar Imej Yang Dimuat Naik Dengan Betul Berdasarkan Orientasi EXIF menggunakan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!