Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah imej berputar berdasarkan data EXIF ​​tidak berfungsi untuk iPhone dan peranti Android?

Mengapakah imej berputar berdasarkan data EXIF ​​tidak berfungsi untuk iPhone dan peranti Android?

Mary-Kate Olsen
Lepaskan: 2024-10-27 18:38:30
asal
758 orang telah melayarinya

Why is rotating images based on EXIF data not working for iPhones and Android devices?

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>
Salin selepas log masuk

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(&amp;$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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan