Baca Data EXIF dan Laraskan Orientasi Imej dalam PHP
Masalah:
Memutar imej yang dimuat naik berdasarkan orientasi mereka menggunakan data EXIF tidak berfungsi dengan betul untuk imej daripada iPhone dan Android.
Kod:
Kod berikut cuba memutar imej berdasarkan EXIFnya orientasi:
<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>
Output var_dump($exif) menunjukkan bahawa medan Orientasi wujud dalam data EXIF untuk imej daripada iPhone dan Android.
Penyelesaian:
Untuk menyelesaikan isu tersebut, fungsi pembetulan orientasi mesti dioptimumkan untuk mengendalikan nilai orientasi khusus yang digunakan oleh iPhone dan Android.
Berikut ialah versi dipertingkatkan fungsi pembetulan orientasi menggunakan 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>
Untuk menggunakan fungsi tersebut, hanya gunakannya pada imej sebelum menyimpan atau memaparkan:
<code class="php">image_fix_orientation($image, $upload_path . $newfilename); imagejpeg($image, $upload_path . $newfilename, 100);</code>
Fungsi yang dioptimumkan ini kini seharusnya memutarkan imej daripada iPhone dan Android dengan betul berdasarkan data orientasi EXIF mereka .
Atas ialah kandungan terperinci Mengapakah imej berputar berdasarkan data EXIF tidak berfungsi untuk iPhone dan peranti Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!