3 Stimmen

Berücksichtigung der EXIF-Ausrichtung bei der Anzeige von iPhone-Fotos im Internet

Ich entwickle eine iPhone-Kamera-App, die ein Bild auf Amazon S3 hochlädt und dieses Bild auf einer Website anzeigt. Wenn das iPhone ein Bild aufnimmt, speichert es das Foto immer in einer aufrechten Ausrichtung, während die Ausrichtung, die zur korrekten Anzeige des Fotos verwendet wird, in den EXIF-Daten des Bildes gespeichert wird. Wenn ich also ein Foto mit dem iPhone aufnehme und es in FireFox öffne, ohne die EXIF-Daten zu verarbeiten, könnte das Bild seitwärts oder auf dem Kopf stehen.

Mein Problem ist, dass ich nicht weiß, wie ich das Foto in der richtigen Ausrichtung auf der Website anzeigen kann. Meine derzeitige Lösung ist, das Foto in der iPhone-App zu drehen, aber das möchte ich lieber nicht tun. Gibt es eine Möglichkeit, die EXIF-Daten bei der Anzeige im Web zu berücksichtigen, ohne das Bild vorher zu bearbeiten?

2voto

mikerobi Punkte 19791

Sie haben mehrere Möglichkeiten, die ich in der von mir bevorzugten Reihenfolge aufliste.

  1. Drehen Sie das Bild auf der Kamera.
  2. Laden Sie die Daten über Amazon EC2 hoch und verwenden Sie ein Programm, um die Exif-Daten zu lesen und die Rotation durchzuführen.
  3. Starten Sie ein Programm auf Ihrem Webserver, das s3 als Proxy nutzt und die Rotation durchführt.
  4. Verwenden Sie ein paar ausgefallene Javascript und DHTML.

Option 3 ist möglicherweise nicht in allen Browsern zuverlässig, und ich bin mir über die Leistung nicht sicher. Option 2 würde unnötige Komplexität hinzufügen. Vielleicht wollen Sie das nicht, aber wenn Sie nicht vorhaben, das Netz für etwas anderes als die Speicherung zu nutzen, ist Option 1 die beste.

1voto

Lou Franco Punkte 85315

Das Drehen auf der Kamera ist vielleicht die beste Option, aber wenn Sie das Bild vor dem Speichern drehen und es sich um ein JPEG handelt, ist die Drehung ein verlustbehafteter Vorgang, so dass das gespeicherte Bild sofort an Qualität verliert.

Glücklicherweise muss das nicht so sein: Anstatt das JPEG einzulesen, das Bild zu drehen und dann wieder als JPEG zu kodieren, gibt es Möglichkeiten, die Drehung direkt auf die Datei anzuwenden.

JPEG wird als eine Reihe von 8x8-Zellen gespeichert, die einzeln gedreht und neu angeordnet werden können, ohne dass die Qualität darunter leidet (in 90-Grad-Schritten), dann müssen Sie die Metadaten mit den Größeninformationen aktualisieren.

Hier ist etwas C++-Code, den Sie portieren könnten

http://eng.neologica.it/download/downloadIJGWin32.html

Für .NET hat mein Unternehmen ( Atalasoft ) bietet ein SDK, das dies ermöglicht.

Eine andere Möglichkeit besteht darin, das JPEG zu lesen, zu drehen und dann als PNG zu speichern, aber die Dateigröße ist dann viel größer.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X