Workshop: Photo Sphere erstellen
Ein Workshop wie man mit ExifTool die fehlenden XMP Metadaten (Extensible Metadata Platform) zu einem Panoramabild ergänzt um eine Photo Sphere zu erhalten.
Am Ende dieses Workshops wird ein Script erarbeitet, welches aus einem Panoramabild eine Photosphere erzeugt, die sich in Google Fotos, Facebook, Android, Apple iOS usw. dreht. Weiters werden Geokoordinaten und Copyright-Informationen zur Photosphere hinzugefügt, Anfangsansicht des Panoramaviewers eingestellt und Datum/Uhrzeit/Zeitzone, Farbraum und Punktdichte korrigiert.
Früher, als es noch keine 360°-Kameras gab, mußte man die Panoramen aus Einzelbildern mit einem Stitcher zusammensetzen. Damals gab es noch kein Google Street View. Google war erst am Anfang und Facebook gab es noch nicht, geschweige denn Android oder iPhone. Auf Webseiten waren Java-Viewer für Panoramabilder beliebt, sind aber mittlerweile aus der Mode gekommen nicht nur wegen der vielen und nie enden wollenden Sicherheitslücken von Java.
Heutzutage ist alles viel einfacher geworden, trotzdem existieren immer noch 360°-Panoramen in Archiven die keine XMP-Metadaten haben und sich deshalb in Facebook nicht drehen können.
Daher muß man die Metadaten manuell hinzufügen. Am einfachsten geschieht dies mit dem
ExifTool
Am besten von der ExifTool-Homepage downloaden, Pfad setzen, fertig. Hilfreich dazu ist noch die grafische Oberfläche, genannt ExifToolGUI, ist aber nicht unbedingt notwendig.
Equirektangularprojektion
Ist die Projektion einer Kugeloberfläche auf eine Ebene, also eine Grafikdatei im Format 2:1 bzw. 360° x 180°.
Facebook, Android
Für ein Vollsphärenpanorama reicht der Parameter ProjectionType
, dieser muß auf equirectangular
gesetzt sein damit sich das Panorama in Facebook oder Android drehen kann.
exiftool -ProjectionType="equirectangular" input.jpg
Für Facebook werden Abmessungen von maximal 6000 x 3000 Pixel (18 Megapixel) empfohlen.
Panoramaviewer für Android ist zum Beispiel TurnMe Panorama.
Google Fotos
Bei einem Vollsphärenpanorama kommt zur Kommandozeile hinzu
-UsePanoramaViewer="True" '-CroppedAreaImageWidthPixels<$ImageWidth' '-CroppedAreaImageHeightPixels<$ImageHeight' '-FullPanoWidthPixels<$ImageWidth' '-FullPanoHeightPixels<$ImageHeight' -CroppedAreaLeftPixels="0" -CroppedAreaTopPixels="0"
Fotos dürfen nicht mehr als 75 MB und 100 Megapixel haben und dürfen nicht mehr als 32767 Pixel groß sein. Alles was darüber hinaus geht kann nicht in Google Fotos gespeichert werden.
Zenit und Nadir
Meistens fehlt im Panorama Zenit und Nadir (also oben und unten abgeschnitten), speziell wenn beim Fotografieren kein Fischaugobjektiv verwendet wurde. Die Grafikdatei ist dann nicht mehr im Format 2:1, also keine vollständige Kugeloberfläche mehr. In diesem Fall müssen die Cropped-Parameter angepaßt werden.
Beispiel aus der Praxis
Ein Vollsphärenpanorama hätte die Abmessung 5376 x 2688. Da jedoch beim Fotografieren kein Fischaugobjektiv verwendet wurde fehlen Zenit und Nadir und die Grafikdatei hat nur mehr 5376 x 2048 Pixel, also 360° x 137° statt 360° x 180°.
Wie kann man das Panoramafoto zu einer Photosphere umwandeln?
Linux
Die vollständige Befehlskette lautet unter Linux:
exiftool -ProjectionType="equirectangular" -UsePanoramaViewer="True" '-CroppedAreaImageWidthPixels<$ImageWidth' '-CroppedAreaImageHeightPixels<$ImageHeight' '-FullPanoWidthPixels<$ImageWidth' '-FullPanoHeightPixels<${ImageWidth;$_/=2}' -CroppedAreaLeftPixels="0" '-CroppedAreaTopPixels<${Imagewidth;$_=($_/2-$self->GetValue("ImageHeight"))/2}' input.jpg
Windows
ExifTool ist Perl und deswegen verwenden Windows-Benutzer statt dem Zeichen '
das Zeichen "
überall dort wo das Zeichen $
vorkommt, sodaß die Befehlskette lautet:
exiftool -ProjectionType="equirectangular" -UsePanoramaViewer="True" "-CroppedAreaImageWidthPixels<$ImageWidth" "-CroppedAreaImageHeightPixels<$ImageHeight" "-FullPanoWidthPixels<$ImageWidth" "-FullPanoHeightPixels<${ImageWidth;$_/=2}" -CroppedAreaLeftPixels="0" "-CroppedAreaTopPixels<${Imagewidth;$_=($_/2-$self->GetValue(\"ImageHeight\"))/2}" input.jpg
Kamerahersteller und -modell
Die Metadaten einer 360°-Kamera sind nicht unbedingt notwendig. Werden sie jedoch hinzugefügt und ist das Panorama eine vollständige Kugeloberfläche öffnet sich in Google Fotos automatisch die Panoramaansicht. Fehlen diese Metadaten, sieht man zunächst nur die flache Ansicht des Panoramas mit einem Symbol in der Mitte des Bildes zum Wechseln in die Panoramaansicht.
LG 360 CAM
-Make="LG Electronics" -Model="LG-R105"
Ricoh Theta S
-Make="RICOH" -Model="RICOH THETA S"
Google Maps
Soll die Photosphere in Google Maps angezeigt werden ist der Parameter PoseHeadingDegrees
erforderlich, ansonsten kann er weggelassen werden. Des weiteren muß das Panorama eine volle Kugeloberfläche sein und Geokoordinaten enthalten. Die Grafikdatei muß also ein Seitenverhältnis von 2:1 haben (360° x 180°).
PoseHeadingDegrees
gibt an wohin der Mittelpunkt des Bildes zeigt, ähnlich wie ein Kompass. Der Parameter wird in Grad gemessen und muß >=0° und < 360° sein.
-PoseHeadingDegrees="0" | Mittelpunkt des Bildes zeigt nach Norden |
-PoseHeadingDegrees="90" | Mittelpunkt des Bildes zeigt nach Osten |
-PoseHeadingDegrees="180" | Mittelpunkt des Bildes zeigt nach Süden |
-PoseHeadingDegrees="270" | Mittelpunkt des Bildes zeigt nach Westen |
Anfangsansicht
Werden diese Parameter nicht gesetzt, ist die Anfangsansicht im Panoramviewer die Bildmitte des Panoramas.
InitialViewHeadingDegrees
Ist die Orientierung der Anfangssicht in Grad.
-InitialViewHeadingDegrees="0" | linker Rand des Bildes |
-InitialViewHeadingDegrees="180" | Bildmitte |
-InitialViewHeadingDegrees="360" | rechter Rand des Bildes |
InitialViewPitchDegrees
Der Neigungswinkel der Anfangssicht in Grad.
-InitialViewPitchDegrees=“0″
InitialViewRollDegrees
Der Rollwinkel der Anfangssicht in Grad.
-InitialViewRollDegrees="0"
InitialHorizontalFOVDegrees
Gibt den horizontalen Bildwinkel in Grad an (FOV = Field Of View). Je kleiner der Bildwinkel, desto größer der Vergrößerungsfaktor.
-InitialHorizontalFOVDegrees="90"
Farbraum
Fehlt meistens bei den alten Archivbildern.
Einstellen auf sRGB (Standard RGB):
-ColorSpace="sRGB" -ColorMode="RGB"
Punktdichte
Wird in dpi angegeben („dots per inch“ oder „Punkte per Zoll“). Ist oft fälschlicherweise auf 72 dpi statt 300 dpi eingestellt oder die Parameter fehlen komplett.
Einstellen auf 300 dpi:
-XResolution="300" -YResolution="300"
Datum/Uhrzeit/Zeitzone
Das Datum wird im Format YYYY:MM:TT angegeben und die Uhrzeit im Format HH:MM:SS.
Die Zeitzone wird als Offset zur UTC (Coordinated Universal Time) angegeben.
-DateTimeOriginal="2001:12:31 12:00:00" -CreateDate="2001:12:31 12:00:00" -ModifyDate="2001:12:31 12:00:00" -OffsetTime="+07:00" -OffsetTimeOriginal="+07:00" -OffsetTimeDigitized="+07:00"
GPS Koordinaten
Um die Position auf der Weltkarte darstellen zu können, werden die geographische Breite und Länge in Dezimalgrad benötigt. Dieses Wertepaar erhält man am schnellsten von Google Earth.
In Google Earth in den Optionen aus dem Menü Tools zuerst die Breite/Länge auf Dezimalgrad einstellen
Nun erscheinen in Google Earth beim Darüberfahren mit der Maus über einen Ort rechts unten in der Statuszeile die Breiten- und Längengrade in Dezimalgrad, die 1:1 in das Panorama übernommen werden können.
Breitengrad
Ist in ExifTool der Parameter GPSLatitude
und GPSLatitudeRef
.
Ist der Breitengrad positiv, liegt er nördlich des Äquators und GPSLatitudeRef
ist entweder 1 oder N.
Ist der Breitengrad negativ, liegt er südlich des Äquators und GPSLatitudeRef
ist entweder -1 oder S.
Längengrad
Ist in ExifTool der Parameter GPSLongitude
und GPSLongitudeRef
.
Ist der Längengrad positiv, liegt er östlich von Greenwich und GPSLongitudeRef
ist entweder 1 oder E.
Ist der Längengrad negativ, liegt er westlich von Greenwich und GPSLongitudeRef
ist entweder -1 oder W.
Beispiele
Ort | ExifTool-Parameter |
Wien | -GPSLatitude="48.208174" -GPSLatitudeRef="1" -GPSLongitude="16.373819" -GPSLongitudeRef="1" |
San Francisco | -GPSLatitude="37.774930" -GPSLatitudeRef="1" -GPSLongitude="-122.419416" -GPSLongitudeRef="-1" |
Rio de Janiero | -GPSLatitude="-22.906847" -GPSLatitudeRef="-1" -GPSLongitude="-43.172897" -GPSLongitudeRef="-1" |
Sydney | -GPSLatitude="-33.934709" -GPSLatitudeRef="-1" -GPSLongitude="151.215976" -GPSLongitudeRef="1" |
Höhe über dem Meeresspiegel
Ist in ExifTool der Parameter GPSAltitude
und GPSAltitudeRef
.
Ist die Höhe über dem Meeresspiegel so ist GPSAltitudeRef=0
, sonst ist GPSAltitudeRef=1
.
Copyright
-CopyrightFlag="True" -Marked="True" -Creator="Gerald Allerstorfer" -Artist="Gerald Allerstorfer" -Author="Gerald Allerstorfer" -Rights="© Gerald Allerstorfer, all rights reserved" -Copyright="© Gerald Allerstorfer, all rights reserved" -CopyrightNotice="© Gerald Allerstorfer, all rights reserved" -UsageTerms="© Gerald Allerstorfer, all rights reserved"
Universal-Script
zur manuellen Umwandlung eines Panoramafotos in eine Photosphere mit ExifTool.
Der komplette Workshop in einem Einzeiler.
exiftool -overwrite_original -CopyrightFlag="True" -Marked="True" -Creator="Gerald Allerstorfer" -Artist="Gerald Allerstorfer" -Author="Gerald Allerstorfer" -Rights="© Gerald Allerstorfer, all rights reserved" -Copyright="© Gerald Allerstorfer, all rights reserved" -CopyrightNotice="© Gerald Allerstorfer, all rights reserved" -UsageTerms="© Gerald Allerstorfer, all rights reserved" -DateTimeOriginal="2001:02:03 04:05:06" -CreateDate="2001:02:03 04:56:06" -ModifyDate="2001:02:03 04:05:06" -PoseHeadingDegrees="0" -PosePitchDegrees="0" -PoseRollDegrees="0" -InitialViewHeadingDegrees="180" -InitialViewPitchDegrees="0" -InitialViewRollDegrees="0" -InitialHorizontalFOVDegrees="60" -ColorSpace="sRGB" -ColorMode="RGB" -XResolution="300" -YResolution="300" -Make="RICOH" -Model="RICOH THETA S" -ProjectionType="equirectangular" -UsePanoramaViewer="True" '-CroppedAreaImageWidthPixels<$ImageWidth' '-CroppedAreaImageHeightPixels<$ImageHeight' '-FullPanoWidthPixels<$ImageWidth' '-FullPanoHeightPixels<${ImageWidth;$_/=2}' -CroppedAreaLeftPixels="0" '-CroppedAreaTopPixels<${Imagewidth;$_=($_/2-$self->GetValue("ImageHeight"))/2}' panoramafoto.jpg
Sollte das Zeichen © nicht richtig übernommen werden verwenden Sie statt dessen (C) oder rufen obige Kommandozeile in Linux anstatt Windows auf.
Siehe auch
- Google Street View Leitfaden für Photo Sphere XMP Metadaten
developers.google.com/streetview/spherical-metadata - Editing 360 Photos & Injecting Metadata
facebook.com/notes/eric-cheng/editing-360-photos-injecting-metadata/10156930564975277