Übersicht über WIC-Metadaten
In diesem Thema wird die Unterstützung von Imagemetadaten vorgestellt, die von der Windows Imaging Component (WIC) bereitgestellt wird. Es bietet eine Einführung in das Lesen und Schreiben von Bildmetadaten, die Metadatenabfragesprache und die Erweiterbarkeit des Metadatenhandlers.
Bildmetadaten sind Daten, die in eine Bilddatei eingebettet sind, die zusätzliche Informationen zum Bild enthält, z. B. das Gerät, das zum Erfassen des Bilds verwendet wird, oder die Abmessungen des Bilds. Obwohl sie in der Bilddatei selbst enthalten ist, sind diese Metadaten nicht Teil der Renderingdaten. WIC bietet Schnittstellen, mit denen Sie diese Metadaten für mehrere gängige Metadatenformate lesen und schreiben können, einschließlich Extensible Metadata Platform (XMP), Exchangeable Image File (EXIF) und Png Textual Data (tEXt).
Dieses Thema enthält folgende Abschnitte:
- Voraussetzungen
- Introduction (Einführung)
- Lesen von Bildmetadaten
- Schreiben von Bildmetadaten
- Metadatenerweiterbarkeit
- Unterstützte Metadatenformate
- Zusammenfassung der Metadatenkomponente
- Zugehörige Themen
Voraussetzungen
Um dieses Thema zu verstehen, sollten Sie mit den WIC-Encoder- und Decoderschnittstellen und den zugehörigen COM-Komponenten (Component Object Model) vertraut sein, wie in der Übersicht über windows Imaging-Komponenten beschrieben. Außerdem ist es hilfreich, sich allgemein mit einigen der heute verwendeten Bilderstellungsmetadatenformate vertraut zu machen.
Einführung
Metadaten stellen erweiterte Informationen zu einem Bild bereit. Diese Informationen können auf verschiedene Arten verwendet werden. Ein Bild kann Metadaten wie eine Beschreibung, eine Bewertung, Kategorietags und Copyrightinformationen enthalten. Der Zugriff auf die Metadaten erleichtert die Ausführung von Aufgaben wie der Verwaltung von Ressourcen, des Dateispeicherorts oder das Ermitteln von Copyrightinformationen. Mit der Windows-Fotogalerie in Windows Vista können Sie beispielsweise Beschreibungen und Kategorietags zu Bildern hinzufügen. Dies ermöglicht eine bessere Auffindbarkeit von Bildern und eine bequeme Möglichkeit zum Kategorisieren von Bildern. Mithilfe der WIC-APIs und gängigen Metadatenformate können Anwendungen diese Art von Metadaten ganz einfach in oder aus Bildern schreiben oder lesen.
Das folgende Diagramm veranschaulicht den Inhalt einer JPEG-Datei, die eingebettete Metadatenblöcke und Metadatenelemente enthält.
In diesem Beispielbild werden die Metadaten in die Bilddatei in einem Bildrahmen eingebettet. Das JPEG-Format unterstützt nicht mehrere Bildframes, sodass die Metadaten konzeptionell an diesen einzelnen Frame angefügt werden. Bei Formaten, die mehrere Frames unterstützen, z. B. TIFF, sind möglicherweise Metadaten an jeden Bildrahmen angefügt, wie in diesem Diagramm dargestellt. Obwohl es heute nicht üblich ist und von den nativen Bildcodecs nicht unterstützt wird, unterstützen einige Bildformate möglicherweise auch Metadaten außerhalb eines Bildframes. WIC ist flexibel genug, um Sowohl Metadaten auf Frameebene als auch Metadaten außerhalb des einzelnen Frames eines Bilds zu verarbeiten.
Lesen von Bildmetadaten
Die WIC-APIs stellen COM-Komponenten bereit, die Anwendungen das Lesen und Schreiben von Bildmetadaten erleichtern.
Die primäre Möglichkeit zum Lesen von Metadaten besteht darin, einen Metadatenabfrageleser (IWICMetadataQueryReader) für den Zugriff auf bestimmte Metadatenelemente zu verwenden. Die Komponente des Metadatenabfragelesers wird vom Codec implementiert und kann auf Decoderebene oder über einzelne Bildframes zugegriffen werden, was die gängigere Methode ist. Der folgende Code veranschaulicht, wie Sie mithilfe der GetMetadataQueryReader-Methode des Abfragelesers auf einen Abfrageleser für einen einzelnen Frame zugreifen.
// Get the query reader
if (SUCCEEDED(hr))
{
hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}
Ein Abfrageleseprogramm bietet Methoden zum Abrufen von Informationen zu bestimmten Metadaten sowie ein Mittel zum Angeben eines abzurufenden Metadatenelements. Der folgende Code verwendet einen Abfrageausdruck, um ein bestimmtes Metadatenelement innerhalb des IFD-Blocks (Geschachtelte Bilddateiverzeichnis) von App1 anzufordern. Dies erfolgt mithilfe der GetMetadataByName-Methode des Abfragelesers. Der folgende Code veranschaulicht die Verwendung des Abfragelesers zum Abrufen des MicrosoftPhoto-Bewertungswerts.
PROPVARIANT value;
PropVariantInit(&value);
LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";
if (SUCCEEDED(hr))
{
hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}
Die Variable pwzRatingQuery im vorherigen Beispiel ist die Abfragezeichenfolge für den Zugriff auf das Metadatenelement MicrosoftPhoto-Bewertung. Diese Zeichenfolge wird mithilfe der Metadatenabfragesprache erstellt. Um diese Zeichenfolge zu erstellen, sind Kenntnisse des Metadatenformats und der Metadatenabfragesprache erforderlich, um einzelne Metadatenelemente abzurufen. Weitere Informationen zur Metadatenabfragesprache finden Sie unter Übersicht über die Metadatenabfragesprache.
Im Hintergrund verwendet ein Abfrageleser einen Metadatenleser (IWICMetadataReader), um auf die Metadaten zuzugreifen, die durch den Abfrageausdruck beschrieben werden. Zusätzlich zur Verwendung eines Abfragelesers können Sie auch direkt auf einen Metadatenleser zugreifen, um Metadaten zu lesen. Sie können einen Metadatenleser vom Decoder oder einzelnen Frames abrufen, indem Sie eine Blockleseschnittstelle (IWICMetadataBlockReader) abfragen.
Schreiben von Bildmetadaten
Der Prozess zum Schreiben von Metadaten ähnelt der Art und Weise, wie sie gelesen werden, mit der Ausnahme, dass ein Metadatenabfrage-Writer (IWICMetadataQueryWriter) verwendet wird. Die Abfrage-Writer-Schnittstelle wird vom Bildencoder implementiert, und wie beim Abfrageleser wird sowohl auf dem Encoder als auch auf einzelne Frames zugegriffen (abhängig von der Bildformatunterstützung).
Der folgende Code veranschaulicht, wie Sie einen Abfragewriter aus einem Encoderframe abrufen und den zuvor gelesenen Bewertungswert entfernen.
// Get the frame's query writer
if (SUCCEEDED(hr))
{
hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}
if (SUCCEEDED(hr))
{
hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}
Eine weitere Möglichkeit zum Schreiben von Metadaten sind schnelle Metadatenupdates. Die schnelle Metadatencodierung ist eine Möglichkeit, Bildmetadaten zu schreiben, ohne eine Bilddatei neu codieren zu müssen. Dazu werden neue Metadateninformationen in einen aufgefüllten Bereich des Metadatenformats geschrieben. Der schnelle Metadatenencoder (IWICFastMetadataEncoder) wird basierend auf dem Bilddecoder aus der Komponentenfactory abgerufen. Der schnelle Metadatenencoder ruft dann einen Abfrage-Writer ab, der zum Schreiben der Metadaten verwendet wird. Schließlich committet der schnelle Encoder die Änderung.
Der folgende Code veranschaulicht, wie Ein schneller Metadatenencoder abgerufen und zum Schreiben des MicrosoftRating-Werts verwendet wird.
if (SUCCEEDED(hr))
{
IWICFastMetadataEncoder *pFME = NULL;
IWICMetadataQueryWriter *pFMEQW = NULL;
hr = pFactory->CreateFastMetadataEncoderFromFrameDecode(
pFrameDecode,
&pFME);
if (SUCCEEDED(hr))
{
hr = pFME->GetMetadataQueryWriter(&pFMEQW);
}
if (SUCCEEDED(hr))
{
// Add additional metadata
PROPVARIANT value;
PropVariantInit(&value);
value.vt = VT_UI4;
value.uiVal = 99;
hr = pFMEQW->SetMetadataByName(L"/app1/ifd/{ushort=18249}", &value);
PropVariantClear(&value);
}
if (SUCCEEDED(hr))
{
hr = pFME->Commit();
}
}
Nicht alle Metadatenformate unterstützen schnelle Metadaten. Informationen dazu, welche nativ unterstützten Formate die schnelle Metadatencodierung unterstützen, finden Sie in der Tabelle im Abschnitt Unterstützte Metadatenformate weiter unten in diesem Dokument.
Hinter den Kulissen verwendet ein Abfrage-Writer einen Metadaten-Writer (IWICMetadataWriter), um die durch den Abfrageausdruck beschriebenen Metadaten zu schreiben. Zusätzlich zur Verwendung eines Abfragelesers können Sie auch direkt auf einen Metadaten-Writer zugreifen, um Metadaten zu schreiben. Sie können einen Metadaten-Writer vom Decoder oder einzelnen Frames abrufen, indem Sie eine Block writer-Schnittstelle (IWICMetadataBlockWriter) abfragen.
Metadatenerweiterbarkeit
Wie bereits erwähnt, stellt WIC mehrere Metadatenhandler zum Lesen und Schreiben von Metadaten für gängige Metadatenformate bereit. Es gibt jedoch einige Metadatenformate, die nicht nativ unterstützt werden. Daher stellt WIC APIs zum Erstellen zusätzlicher Metadatenhandler bereit, die die Metadatenunterstützung auf andere Formate erweitern können.
Um andere Metadatenformate vollständig zu unterstützen, müssen zwei Typen von Handlern entwickelt werden: ein Metadatenleser zum Lesen von Metadaten und ein Metadaten-Writer zum Schreiben von Metadaten. Obwohl diese beiden Handler in der Regel in Paaren für ein bestimmtes Format implementiert werden, ist dies keine Voraussetzung. Es kann vorkommen, dass nur die Lesefähigkeit oder nur die Schreibfähigkeit benötigt wird.
Weitere Informationen zur Erweiterbarkeit von Metadaten mithilfe der WIC-APIs finden Sie in der Übersicht über die Metadatenerweiterbarkeit.
Unterstützte Metadatenformate
WIC bietet Unterstützung für mehrere gängige Metadatenformate. In der folgenden Tabelle sind die unterstützten Metadatenformate, deren Versionen, die Bildformate aufgeführt, die das Metadatenformat unterstützen, und ob das Metadatenformat die schnelle Metadatencodierung unterstützt. Weitere Informationen zur schnellen Metadatencodierung finden Sie weiter oben in diesem Dokument im Abschnitt Schreiben von Bildmetadaten .
Unterstützte Metadatenformate | Version der Metadatenspezifikation | Unterstützung des Bildformats | Unterstützt schnelle Metadatencodierung |
---|---|---|---|
App0 | JFIF 1.02 | JPEG | Nein |
App1 | JFIF 1.02 | JPEG, TIFF | Nein |
App13 | Unbekannt | JPEG, TIFF | Nein |
IFD | TIFF 6.0 | JPEG, TIFF | Ja |
IRB1 | Unbekannt | JPEG, TIFF | Nein |
EXIF | Exif 2.2 | JPEG, TIFF | Ja |
XMP | XMP 1.0 (September 2005) | JPEG, TIFF | Ja |
GPS | Exif 2.2 | JPEG, TIFF | Ja |
IPTC | IPTC 4.0 | JPEG, TIFF | Ja |
Text | PNG 1.2 | PNG | Nein |
Hinweis
IPTC unterstützt FME nur, wenn die Blöcke größer werden, da IPTC das Auffüllen nicht unterstützt.
Metadatenkomponentenzusammenfassung
In der folgenden Tabelle werden die WIC-Schnittstellen, die Metadaten unterstützen, und die entsprechenden Komponenten beschrieben. Diese Komponenten ermöglichen den Zugriff auf die Metadaten eines Images. Weitere Informationen zu diesen Komponenten finden Sie in der Übersicht über die Windows-Bildverarbeitungskomponenten.
Komponente | BESCHREIBUNG |
---|---|
Bitmap-Decoder (IWICBitmapDecoder) |
|
Bitmapframedecodierung (IWICBitmapFrameDecode) |
|
Bitmap Encoder (IWICBitmapEncoder) |
|
Bitma-Framecodierung (IWICBitmapFrameEncode) |
|
In der folgenden Tabelle werden die WIC-Metadatenkomponenten beschrieben. Mit diesen Komponenten können Sie die Metadaten in einem Bild lesen und schreiben, das von den in der vorherigen Tabelle aufgeführten Komponenten verfügbar gemacht wird.
Komponente | BESCHREIBUNG |
---|---|
Metadatenabfrageleser (IWICMetadataQueryReader) |
|
Metadatenabfrageschreiber (IWICMetadataQueryWriter) |
|
Metadatenblockleser (IWICMetadataBlockReader) |
|
Metadatenblockwriter (IWICMetadataBlockWriter) |
|
Metadatenleser (IWICMetadataReader) |
|
Metadaten-Writer (IWICMetadataWriter) |
|
Fast Metadata EncoderIWICFastMetadataEncoder |
|
Zugehörige Themen