Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memutar Imej Yang Dimuat Naik Dengan Betul Berdasarkan Orientasi EXIF ​​menggunakan PHP?

Bagaimana untuk Memutar Imej Yang Dimuat Naik Dengan Betul Berdasarkan Orientasi EXIF ​​menggunakan PHP?

Susan Sarandon
Susan Sarandonasal
2024-10-31 14:28:02751semak imbas

How to Correctly Rotate Uploaded Images Based on EXIF Orientation using PHP?

PHP read_exif_data dan Laraskan Orientasi

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.

Membaca Data EXIF

Data EXIF ​​diekstrak menggunakan exif_read_data($upload_path . $newfilename), yang mengembalikan tatasusunan dengan pelbagai metadata. Kekunci "Orientasi" memegang nilai yang menunjukkan orientasi imej.

Melaraskan Orientasi

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 GD

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>

Versi GD satu baris

<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 ImageMagick

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!

Kenyataan:
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