Heim >Backend-Entwicklung >PHP-Tutorial >Warum funktioniert das Drehen von Bildern basierend auf EXIF-Daten nicht auf iPhones und Android-Geräten?
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(&$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!