So wird’s gemacht: Lesen von Bildmetadaten (HTML)
[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation ]
In diesem Thema wird erläutert, wie Sie Metadaten aus einer Bilddatei abrufen. Bildformate wie JPEG, TIFF und PNG unterstützten viele Arten eingebetteter Metadaten, die Informationen wie Schlüsselwörter, GPS-Standorte und Kamerainformationen enthalten. Sie können auf häufig verwendete Bildverarbeitungseigenschaften zugreifen, oder Sie verwenden erweiterten Zugriff auf rohe Metadaten, die in Formaten wie EXIF und XMP gespeichert werden.
Je nach Szenario wird eine von zwei Klassen für den Zugriff auf Bildverarbeitungs-Metadaten verwendet: Windows.Storage.FileProperties.ImageProperties oder Windows.Graphics.Imaging.BitmapPropertiesView.
Sie können BitmapPropertiesView verwenden, um Windows-Eigenschaften abzurufen, wie z. B. ImageProperties. Sie erhalten dadurch jedoch weniger Zugriff auf systemeigene Metadatenstrukturen in der Datei mit der WIC-Metadatenabfragesprache. Beim Zugriff auf systemeigene Metadaten handelt es sich um ein erweitertes Szenario. Sie erhalten dadurch Zugriff auf mehr Metadaten, als durch das Windows-Eigenschaftssystem bereitgestellt werden.
Wissenswertes
Technologien
- Erstellen Ihrer ersten Windows-Runtime-App mit JavaScript
- Windows.Storage.FileProperties.ImageProperties
- Windows.Graphics.Imaging
- Windows-Bilderstellungskomponente-Metadatenabfragesprache (WIC)
Voraussetzungen
- Es wird vorausgesetzt, dass Sie eine einfache Windows-Runtime-App mit JavaScript erstellen können. Weitere Informationen finden Sie unter Erstellen Ihrer ersten Windows-Runtime-App mit JavaScript.
- Sie haben ein StorageFile-Objekt oder BitmapDecoder-Objekt erstellt. Unter So wird's gemacht: Decodieren von Bildern werden beide Vorgänge erläutert.
Anweisungen
Schritt 1: Abrufen eines Decoderobjekts
Schreiben Sie den Anfang einer Funktion, die ein BitmapDecoder-Objekt empfängt. Deklarieren Sie außerdem Variablen, in denen die abgerufenen Eigenschaften gespeichert werden.
(function (decoder) {
var orientation;
var xmpCreator;
Verwenden Sie den Decoder, um auf die Bildmetadaten zuzugreifen. Falls Sie noch kein Decoderobjekt haben, lesen Sie So wird's gemacht: Decodieren von Bildern. Deklarieren Sie die Variablen hier, um den Bereich beizubehalten.
Schritt 2: Abrufen einer Windows-Eigenschaft
Die BitmapDecoder-Klasse verfügt über einen Member BitmapProperties des Typs BitmapPropertiesView. Wie bei ImageProperties können Sie weiterhin eine unterstützte Windows-Eigenschaft asynchron abrufen, indem Sie eine Liste von Eigenschaftsschlüsselnamen an bitmapProperties.getPropertiesAsync übergeben.
Hinweis Es werden nicht alle Eigenschaften für jedes Format unterstützt. Unter Richtlinien zu Fotometadaten ist aufgelistet, welche Eigenschaften von den Bildformaten unterstützt werden.
return
decoder.bitmapProperties.getPropertiesAsync(["System.Photo.Orientation"])
.then(function(retrievedProps) {
BitmapPropertiesView Verhält sich auf folgende (entscheidende) Art anders als ImageProperties:
- Sie müssen überprüfen, ob eine Eigenschaft vorhanden ist, bevor Sie sie aus der Auflistung abrufen. Die Methode gibt einen Fehler zurück, wenn die Eigenschaft nicht vorhanden ist.
- Jeder Eigenschaftswert ist vom Typ BitmapTypedValue. Dieses Objekt verfügt über einen Value-Member, der die tatsächlichen Daten enthält, und einen Type-Member, der die Daten anzeigt.
- BitmapPropertiesView gibt einen Fehler zurück, wenn das Bildformat eine angeforderte Eigenschaft nicht unterstützt. Sie müssen diese Fehler entweder behandeln oder sicherstellen, dass Ihr Code nur Eigenschaften anfordert, die vom Bildformat unterstützt werden. So enthalten BMP-Dateien beispielsweise keine Metadaten.
So suchen Sie eine Eigenschaft
if (retrievedProperties.hasKey("System.Photo.Orientation") {
orientation = retrievedProperties.lookup("System.Photo.Orientation").value;
}
}, function (error) {
switch (error.number) {
case -2003292287:
// The image format does not support this property.
break;
case -2003292287:
// The image format does not support metadata.
break;
default:
// Catch any other errors.
break;
}
});
Schritt 3: Abrufen systemeigener Bildmetadaten
Während ImageProperties auf Windows-Eigenschaften beschränkt ist, erhalten Sie mit BitmapPropertiesView Zugriff auf die meisten in einem Bild gespeicherten Metadaten. Eine Liste der von den einzelnen Bitmap-Codecs unterstützten Metadaten finden Sie unter Metadatenabfragen für systemeigene Bildformate.
Verwenden Sie die WIC-Metadatenabfragesprache, um ähnlich wie bei der Verwendung von System.Photo-Eigenschaften nach Eigenschaften zu suchen. Ersetzen Sie den Eigenschaftsnamen mit einer Metadaten-Abfragezeichenfolge.
Ersetzen Sie den Code, den Sie in Schritt 2 geschrieben haben, durch folgenden Code:
return decoder.bitmapProperties.getPropertiesAsync(["/xmp/dc:creator"])
.then(function(retrievedProps) {
if (retrievedProperties.hasKey("/xmp/dc:creator") {
xmpCreator = retrievedProperties.lookup("/xmp/dc:creator").value;
}
}, function (error) {
switch (error.number) {
case -2003292287:
// The image format does not support this property.
break;
case -2003292287:
// The image format does not support metadata.
break;
default:
// Catch any other errors.
break;
}
});
Dieser spezifische Codeausschnitt fragt die Erstellermetadaten ab, wie sie im Schema "Dublin Core XMP" definiert sind. Die Abfrage "/xmp/dc:creator" ist nur bei JPEG-Bildern gültig. So unterstützen TIFF-Bilder beispielsweise auch XMP-Metadaten, die entsprechende TIFF-Abfrage lautet jedoch "/ifd/xmp/dc:creator".