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

Susan Sarandon
Lepaskan: 2024-10-31 14:28:02
asal
795 orang telah melayarinya

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

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

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

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

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!

sumber:php.cn
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