Heim >Backend-Entwicklung >PHP-Tutorial >Warum funktioniert das Drehen von Bildern basierend auf EXIF-Daten nicht auf iPhones und Android-Geräten?

Warum funktioniert das Drehen von Bildern basierend auf EXIF-Daten nicht auf iPhones und Android-Geräten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 18:38:30698Durchsuche

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

EXIF-Daten lesen und Bildausrichtung in PHP anpassen

Problem:

Hochgeladene Bilder drehen basierend auf ihrer Ausrichtung unter Verwendung von EXIF-Daten funktioniert bei Bildern von iPhones und Android nicht korrekt.

Code:

Der folgende Code versucht, ein Bild basierend auf seinem EXIF ​​zu drehen Ausrichtung:

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

Die Ausgabe von var_dump($exif) zeigt an, dass das Feld „Ausrichtung“ in den EXIF-Daten für die Bilder von iPhones und Android vorhanden ist.

Lösung:

Um das Problem zu beheben, muss die Ausrichtungskorrekturfunktion optimiert werden, um die spezifischen Ausrichtungswerte zu verarbeiten, die von iPhones und Android verwendet werden.

Hier ist eine verbesserte Version der Ausrichtungskorrekturfunktion mit 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>

Um die Funktion zu nutzen, wenden Sie sie einfach auf das Bild an, bevor Sie es speichern oder anzeigen:

<code class="php">image_fix_orientation($image, $upload_path . $newfilename);
imagejpeg($image, $upload_path . $newfilename, 100);</code>

Diese optimierte Funktion sollte Bilder von iPhones und Android jetzt basierend auf ihren EXIF-Ausrichtungsdaten korrekt drehen .

Das obige ist der detaillierte Inhalt vonWarum funktioniert das Drehen von Bildern basierend auf EXIF-Daten nicht auf iPhones und Android-Geräten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn