Exchangeable Image File Format (Exif)

www.altova.com Alle erweitern/reduzieren Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Designobjekte/Funktionen > Bilder >

Exchangeable Image File Format (Exif)

Das Exchangeable Image File Format (Exif) ist ein Standard zur Definition der von einigen Digital- und Smartphone-Kameras verwendeten Bildformate. Die Metadaten-Tags des Exif-Standards enthalten eine ganze Reihe von Informationen wie z.B. Uhrzeit und Datum sowie Ort der Aufnahme, Kameraeinstellungen und Bildkompositionsdetails. Wenn ein Exif-Bild in die Base64-Kodierung konvertiert wird, werden auch die Metadaten im Bild in Base64 konvertiert und können abgerufen werden.

 

Anmerkung:Nicht alle Digital- oder Smartphone-Kameras liefern Exif-Daten.

 

Exif-Funktionalität von MobileTogether Designer

MobileTogether Designer bietet im Zusammenhang mit Exif die folgenden Funktionalitäten:

 

Die Aktion "Bild vom Benutzer auswählen lassen" bietet eine Option, über die die Kameraapplikation auf dem Client-Gerät des Endbenutzers gestartet werden kann. Das gemachte Foto wird als Base64-kodiertes Bild in einem XML-Node gespeichert. Wenn in der Kameraapplikation das Exif-Format verwendet wird, werden auch die Exif-Metadaten im Base64-kodierten Bild gespeichert. Diese Daten stehen zum sofortigen Abruf aus dem XML-Node zur Verfügung.
Die Altova XPath-Erweiterungsfunktion image-exif-data verwendet ein Base64-kodiertes Bild als Argument und gibt die im String enthaltenen Exif-Metadaten als Attribut-Wert-Paare zurück. (Nähere Informationen dazu finden Sie in der Beschreibung der image-exif-data Funktion. Um nur die Abmessungen des Bildes zu eruieren, verwenden Sie die MobileTogether-XPath-Erweiterungsfunktion mt-image-width-and height.)
Die Altova XPath-Erweiterungsfunktion suggested-image-file-extension verwendet einen Base64-String als Argument und gibt eine Bilddateierweiterung (wie z.B. jpg, png, bmp) zurück. Dies eignet sich zur automatischen Ermittlung des richtigen Bildformats und zum Speichern der Datei mit der entsprechenden Dateierweiterung.
Mit der Aktion "Bild laden/speichern" können Sie ein Base64-kodiertes Bild in einem Bild-Binärformat (wie z.B. jpg, png, bmp) speichern. Exif-Daten werden in Base64-kodiertem Text gespeichert.

 

Im nachstehenden Beispiel wird erklärt, wie Exif-Daten aus einem Base64-kodierten Bild abgerufen und in einer Lösung verwendet werden können.

 

Anmerkung:Jedes Mal, wenn eine Bildquelle geändert wird (z.B. durch eine vom Benutzer getroffene Auswahl), ist eine Neu laden-Aktion für das Bild erforderlich, damit das neue Bild angezeigt wird.

 

Anmerkung:Exif-Daten gehen beim Drehen des Bilds oder beim Anpassen der Größe verloren.

 

Beispieldatei: Base64Images.mtd

Die Designdatei Base64Images.mtd befindet sich in Ihrem Ordner (Eigene) Dokumente MobileTogether: MobileTogetherDesignerExamples\Tutorials\Images. Sie können diese Datei in MobileTogether Designer öffnen, Sie im Simulator ausführen (F5) und sich die Designdefinitionen ansehen. Die Standarddatei des Designs enthält ein Bild mit Exif-Metadaten.

 

Click to expand/collapseGrundlegendes Design

 

In der Designdatei werden Base64-kodierte Bilder verwendet, die in der XML-Datei Base64Images.xml (ebenfalls im Ordner Tutorials\Images) gespeichert sind. Die Struktur der XML-Datei sehen Sie in der Abbildung unten. Das Element images hat sechs Child-Elemente, von denen jedes ein als Base64-Textstring kodieres Bild eines anderen Formats enthält. Es enthält ein Bild mit Exif-Metadaten (das Element exif). In der $PERSISTENT-Struktur werden die temporäre Benutzerauswahl (ComboBoxValue) und die Exif-Daten (ExifData) des ausgewählten Bilds, falls vorhanden, gespeichert.

MTDBase64ImagesTut01

Der obere Bereich des Designs (Abbildung unten) enthält eine Beschriftung für den Seitentitel und zwei Tabellen. Dieser Teil des Designs ist im vorhergehenden Abschnitt, Base64-kodierte Bilder, beschrieben. Ziel ist es, dass der Endbenutzer einen Bildtyp in der Auswahlliste auswählen kann. Anhand dieser Auswahl wird festgelegt, welches Base64-kodierte Bild in der XML-Datei ausgewählt wird, um in der Zelle rechts von der Auswahlliste angezeigt zu werden.

MTDBase64ImagesTut02Design

Wenn der Benutzer in der Auswahlliste den Eintrag exif auswählt, so wird das Base64-kodierte Bild im Element exif der XML-Datei angezeigt. Die Exif-Metadaten werden in zwei Tabellen angezeigt ("Selected Exif data of image" und "Exif metadata of the selected image"; siehe Abbildung des Simulators unten). Wenn Sie die $PERSISTENT-Struktur im Bereich XML-Daten im Simulator erweitern (siehe Abbildung unten), sehen Sie die Exif-Daten, die aus dem Base64-String abgerufen wurden. Das Design der beiden Tabellen zur Anzeige von Exif-Daten ist weiter unten beschrieben. Eine ausführliche Beschreibung anderer Bereiche des Designs finden Sie im vorherigen Abschnitt Base64-kodierte Bilder.

Click to expand/collapse

 

 

Click to expand/collapseAusgewählte Exif-Daten des Bilds

 

Die ausgewählten Exif-Daten werden in einer statischen Tabelle bestehend aus zwei Spalten und mehreren Zeilen angezeigt (Abbildung unten).
Die erste Spalte enthält Beschriftungen; die zweite Spalte enthält Bearbeitungsfelder, von denen jedes einen XPath-Ausdruck enthält, der einen bestimmten Teil der Exif-Metadaten zurückgibt.
 
Click to expand/collapse
 
Die Bildtyp-Informationen werden mit Hilfe der Altova XPath-Erweiterungsfunktion suggested-image-file-extension aus dem Base64-kodierten Textstring abgerufen. Diese Funktion erhält einen String (das Base64-Bild) als Argument und ruft die Dateierweiterung aus dem String ab. Falls der Base64-String keine Dateierweiterungsinformationen enthält, wird ein leerer String zurückgegeben. Der XPath-Ausdruck dafür ist:
 
for $k in suggested-image-file-extension($XML1/images/element()[local-name() eq $PERSISTENT/Root/ComboBoxValue]) 
return if ($k != ''then $k else "Data not available" 
 
Der Ausdruck gibt je nachdem, ob die Funktion einen leeren oder nicht leeren String zurückgibt, alternative Rückgabestrings zurück. Bei Rückgabe eines nicht leeren String wird der String angezegit; bei Rückgabe eines leeren String wird eine entsprechende Meldung angezeigt.
Alle anderen XPath-Ausdrück in der Tabelle (neben der ersten Zeile) verwenden die Altova XPath-Erweiterungsfunktion image-exif-data, um einen bestimmten Teil der Exif-Metadaten abzurufen. Diese Funktion erhält einen String (das Base64-Bild) als Argument und gibt einen Element-Node (namens Exif) zurück, dessen Attribute die Exif-Metadaten enthält. Jedes Attribut-Wert-Paar entspricht einem Exif-Metadaten-Tag. Die Funktion image-exif-data im Ausdruck unten gibt das Exif-Element mit mehreren Attributen zurück. Mit diesem Ausdruck soll die Breite des Bilds aus den Metadaten abgerufen werden. Diese Informationen sind im Attribut-Node @PixelXDimension des Exif-Elements gespeichert.
 
for $k in $PERSISTENT/Root/ExifData/Exif 
return if ($k/@PixelXDimension !=''then $k/@PixelXDimension else "Data not available" 
 
Der Ausdrück überprüft, ob der Node Exif/@PixelXDimension nicht leer oder leer ist. Wenn er nicht leer ist, wird der String angezeigt; andernfalls wird eine entsprechenden Meldung angezeigt.
Nähere Informationen zur Funktion image-exif-data finden Sie im Abschnitt "Altova-Erweiterungsfunktionen".
Beachten Sie den letzen Geolocation-Wert in der Tabelle. Er wird über ein von Altova erstelltes Attribut Exif/@Geolocation abgerufen.
Der Node $PERSISTENT/Root/ExifData wird durch Anhängen eines Child-Node mit den Exif-Daten befüllt, sodass er das Ergebnis der Funktion image-exif-data enthält. Dies erfolgt durch Definieren einer Node anhängen-Aktion zur Auswahlliste, mit der das anzuzeigende Bild ausgewählt wird (siehe Abbildung unten). Die Aktion wird durch das Ereignis BeimBeendenDerBearbeitung der Auswahlliste ausgelöst.
 
MTDExifTut02
 
Beachten Sie die folgenden Punkte:
(i) Der XPath Locator-Ausdruck in der Node anhängen-Aktion lokalisiert den Node in der XML-Datei, der denselben Namen wie der String in $PERSISTENT/Root/ComboBoxValue hat.
(ii) Der Node $PERSISTENT/Root/ExifData wird gelöscht, bevor die Exif-Daten (im Exif-Node) an ExifData angehängt werden.
(iii) Es wurde eine Seitenaktion zum Löschen des Exif-Node in der $PERSISTENT-Struktur definiert. Dadurch werden mögliche Diskrepanzen zwischen dem Anfangsbild (jpg) und alten Exif-Daten im Node ExifData vermieden.

 

 

 

Click to expand/collapseAlle Exif-Daten des Bilds

 

Zur Anzeige aller von der Funktion image-exif-data zurückgegebenen Attribut-Wert-Paare wird eine Tabelle mit einer sich wiederholenden Zeile verwendet (Abbildung des Designs links unten; Simulator-Ansicht rechts unten).
Die sich wiederholende Zeile wird mit Hilfe eines XPath-Ausdrucks, der alle Attribute des von der Funktion image-exif-data zurückgegebenen Exif-Element-Node auswählt, definiert:
$PERSISTENT/Root/ExifData/Exif/@*.
 

MTDExifTut03     MTDExifTut04
 

 

Die erste Spalte der Tabelle enthält die Indexposition des aktuellen Attributs: index-of(../@*/name(), ./name() )
Die zweite Spalte enthält den Namen des aktuellen Attributs: name(.)
Die dritte Spalten enthält den Wert des aktuellen Attributs: current()
Nicht alle Bilder enthalten dieselben Exif-Metadaten. In einigen Fällen können einige Metadaten eventuell fehlen; in anderen Fällen sind wiederum zusätzliche Metadaten vorhanden und in wieder anderen Fällen sind die Metadaten unter Umständen mit nicht standardkonformen, anbieterspezifischen Tags versehen. Daher ist es wichtig zu wissen, welche Metadaten und unter welchen Attributnamen diese zur Verfügung stehen. Nur anhand dieser Informationen können bestimmte Attributwerte abgerufen werden.
Wenn wir die Namen der zurückgegebenen Attribute kennen, können wir deren Wert mit Hilfe der Funktion image-exif-data folgendermaßen aufrufen: image-exif-data(Base64String)/@WantedAttribute. Beachten Sie, dass die Funktion das Element Exif zurückgibt.

 

 

 

Click to expand/collapseBefüllen der $PERSISTENT-Struktur mit Exif-Daten

 

Manchmal ist es nützlich, wenn man alle von der Funktion image-exif-data zurückgegebenen Attribut-Wert-Paare sieht. Um Attribut-Wert-Paare anzuzeigen, können wir diese Ausgabe in der temporären $PERSISTENT-Struktur speichern.
In unserem Beispieldesign wird der Node $PERSISTENT/Root/ExifData durch Anhängen eines Child-Node mit den Ergebnissen der Funktion image-exif-data an den Node ExifData befüllt.
Dazu wird in der Auswahlliste zur Wahl des gewünschten Bilds eine Node anhängen-Aktion definiert (siehe Abbildung unten). Die Node anhängen-Aktion wird durch das Ereignis BeimBeendenDerBearbeitung der Auswahlliste ausgelöst.
 
MTDExifTut02
 
Der XPath Locator-Ausdruck in der Node anhängen-Aktion lokalisiert den Node in der XML-Datei, der denselben Namen wie der String in $PERSISTENT/Root/ComboBoxValue hat.
Der Node $PERSISTENT/Root/ExifData wird gelöscht, bevor die von der Funktion image-exif-data zurückgegebenen Exif-Daten an ExifData angehängt werden.
Wenn wir die Namen der zurückgegebenen Attribute kennen, können wir den Wert jedes dieser Attribute folgendermaßen mit der Funktion image-exif-data aufrufen: image-exif-data(Base64String)/@WantedAttribute.  Beachten Sie, dass die Funktion das Element Exif zurückgibt.

 

 


© 2019 Altova GmbH