Översikt över WIC-metadata
I det här avsnittet beskrivs stöd för metadata för avbildning som tillhandahålls av Windows Imaging Component (WIC). Det ger en introduktion till att läsa och skriva bildmetadata, metadatafrågespråket och utökningsbarhet för metadatahanterare.
Bildmetadata är data som är inbäddade i en bildfil som innehåller ytterligare information om bilden, till exempel den enhet som används för att avbilda bilden eller bildens dimensioner. Även om den finns i själva bildfilen är dessa metadata inte en del av återgivningsdata. WIC tillhandahåller gränssnitt som gör att du kan läsa och skriva dessa metadata för flera vanliga metadataformat, inklusive XMP (Extensible Metadata Platform), Exchangeable Image File (EXIF) och Png Textual Data (tEXt).
Det här avsnittet innehåller följande avsnitt.
- Förkunskaper
- Introduktion
- Läsa bildmetadata
- Skriva bildmetadata
- Utökningsbarhet för metadata
- metadataformat som stöds
- sammanfattning av metadatakomponenten
- Relaterade ämnen
Förutsättningar
För att förstå det här ämnet bör du känna till WIC-kodarens och avkodarens gränssnitt samt deras relaterade komponenter i komponentobjektmodellen (COM), enligt beskrivningen i Windows Imaging Component-översikt. Det hjälper också att ha en allmän kännedom om några av de bildmetadataformat som används idag.
Introduktion
Metadata ger utökad information om en bild. Den här informationen kan användas på flera olika sätt. En bild kan innehålla metadata som en beskrivning, klassificering, kategoritaggar och upphovsrättsinformation. Genom att komma åt metadata blir det enklare att utföra uppgifter som tillgångshantering, filplats eller att fastställa upphovsrättsinformation. Med Windows Fotogalleri i Windows Vista kan du till exempel lägga till beskrivningar och kategoritaggar i bilder. Detta ger bättre identifiering av bilder och ett bekvämt sätt att kategorisera bilder. Med hjälp av WIC-API:er och vanliga metadataformat kan program enkelt skriva eller läsa den här typen av metadata till eller från bilder.
Följande diagram illustrerar innehållet i en JPEG-fil som innehåller inbäddade metadatablock och metadataobjekt.
I den här exempelbilden bäddas metadata in i bildfilen i en bildram. JPEG-formatet stöder inte flera bildramar, så metadata är konceptuellt kopplade till den här enkla ramen. Format som stöder flera bildrutor, till exempel TIFF, kan ha metadata kopplade till varje bildram som det här diagrammet visar. Även om det inte är vanligt idag och inte stöds av de inbyggda bild codecs, kan vissa bildformat också stödja metadata utanför en bildram. WIC är tillräckligt flexibelt för att hantera både metadata på ramnivå och metadata utanför en bilds enskilda ram.
Läsa bildmetadata
WIC-API:erna tillhandahåller COM-komponenter som gör det enkelt för program att läsa och skriva bildmetadata.
Det primära sättet att läsa metadata är att använda en metadatafrågasläsare (IWICMetadataQueryReader) för att få åtkomst till specifika metadataobjekt. Komponenten för metadatafrågasläsare implementeras av codec och kan nås på avkodarnivå eller via enskilda bildramar, vilket är den vanligaste metoden. Följande kod visar hur du får åtkomst till en frågeläsare för en enskild ram med hjälp av frågeläsarens GetMetadataQueryReader-metod.
// Get the query reader
if (SUCCEEDED(hr))
{
hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}
En frågeläsare innehåller metoder för att hämta information om specifika metadata och ett sätt att ange ett metadataobjekt som ska hämtas. Följande kod använder ett frågeuttryck för att begära ett specifikt metadataobjekt i ifd-blocket (App1 nested image file directory). Detta görs med hjälp av frågeläsarens GetMetadataByName--metod. Följande kod visar hur du använder frågeläsaren för att hämta MicrosoftPhoto-klassificeringsvärdet.
PROPVARIANT value;
PropVariantInit(&value);
LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";
if (SUCCEEDED(hr))
{
hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}
Variabeln pwzRatingQuery i föregående exempel är frågesträngen för åtkomst till metadataobjektet MicrosoftPhoto-klassificering. Den här strängen skapas med hjälp av metadatafrågespråket. För att skapa den här strängen krävs kunskap om metadataformatet och metadatafrågespråket för att hämta enskilda metadataobjekt. Mer information om frågespråket för metadata finns i Översikt över frågespråk för metadata.
I bakgrunden använder en frågeläsare en metadataläsare (IWICMetadataReader) för att komma åt metadata som beskrivs av frågeuttrycket. Förutom att använda en frågeläsare kan du också komma åt en metadataläsare direkt för att läsa metadata. Du kan hämta en metadataläsare från avkodaren eller enskilda ramar genom att fråga efter en blockläsare (IWICMetadataBlockReader) gränssnitt.
Skriva bildmetadata
Processen för att skriva metadata liknar hur den läss förutom att en metadatafrågeskrivare (IWICMetadataQueryWriter) används. Frågeskrivarens gränssnitt implementeras av bildkodaren och precis som i frågeläsaren används metadata både på kodaren och på enskilda bildrutor (beroende på stöd för bildformat).
Följande kod visar hur du hämtar en frågeskrivare från en kodarram och tar bort det klassificeringsvärde som tidigare lästes.
// Get the frame's query writer
if (SUCCEEDED(hr))
{
hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}
if (SUCCEEDED(hr))
{
hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}
Ett annat sätt att skriva metadata är genom snabba metadatauppdateringar. Snabb metadatakodning är ett sätt att skriva bildmetadata utan att behöva koda om en bildfil. Detta görs genom att skriva ny metadatainformation till en vadderad region i metadataformatet. Den snabba metadatakodaren (IWICFastMetadataEncoder) hämtas från komponentfabriken, baserat på bilddekodaren. Den snabba metadatakodaren hämtar sedan en frågeskrivare som används för att skriva metadata. Slutligen genomför den snabba kodaren ändringen.
Följande kod visar hur du hämtar en snabb metadatakodare och använder den för att skriva MicrosoftRating-värdet.
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();
}
}
Alla metadataformat stöder inte snabba metadata. Om du vill se vilka format som stöds internt stöder snabb metadatakodning kan du läsa tabellen i avsnittet metadataformat som stöds senare i det här dokumentet.
I bakgrunden använder en frågeskrivare en metadataskrivare (IWICMetadataWriter) för att skriva metadata som beskrivs av frågeuttrycket. Förutom att använda en frågeläsare kan du också komma åt en metadataskrivare direkt för att skriva metadata. Du kan hämta en metadataskrivare från avkodaren eller enskilda bildrutor genom att fråga efter en blockskrivare (IWICMetadataBlockWriter) gränssnitt.
Utökningsbarhet för metadata
Som tidigare nämnts tillhandahåller WIC flera metadatahanterare för att läsa och skriva metadata för vanliga metadataformat. Det finns dock vissa metadataformat som inte stöds internt. Därför tillhandahåller WIC API:er för att skapa ytterligare metadatahanterare som kan utöka metadatastöd till andra format.
För att fullt ut stödja andra metadataformat måste två typer av hanterare utvecklas – en metadataläsare för att läsa metadata och en metadataskrivare för att skriva metadata. Även om dessa två hanterare vanligtvis implementeras i par för ett visst format är det inte ett krav. Det kan finnas vissa fall där endast läsförmågan eller endast skrivförmågan behövs.
Mer information om utökningsbarhet av metadata med hjälp av WIC-API:er finns i Översikt över utökningsbarhet för metadata.
Metadataformat som stöds
WIC har stöd för flera vanliga metadataformat. I följande tabell visas de metadataformat som stöds, deras versioner, de bildformat som stöder metadataformatet och om metadataformatet stöder snabb metadatakodning. Mer information om snabb metadatakodning finns i avsnittet Skriva bildmetadata tidigare i det här dokumentet.
Metadataformat som stöds | Metadataspecifikationsversion | Stöd för bildformat | Stöder snabb metadatakodning |
---|---|---|---|
App0 | JFIF 1.02 | JPEG | Nej |
App1 | JFIF 1.02 | JPEG, TIFF | Nej |
App13 | Okänd | JPEG, TIFF | Nej |
IFD | TIFF 6.0 | JPEG, TIFF | Ja |
IRB | Okänd | JPEG, TIFF | Nej |
Exif | Exif 2.2 | JPEG, TIFF | Ja |
XMP | XMP 1.0 (sept 2005) | JPEG, TIFF | Ja |
GPS | Exif 2.2 | JPEG, TIFF | Ja |
IPTC | IPTC 4.0 | JPEG, TIFF | Ja |
TEXT | PNG 1.2 | PNG | Nej |
Not
IPTC stödjer endast FME om blocken ökar i storlek, eftersom IPTC inte stödjer utfyllnad.
Sammanfattning av metadatakomponent
I följande tabell beskrivs de WIC-gränssnitt som stöder metadata och deras motsvarande komponenter. Dessa komponenter ger åtkomst till en bilds metadata. För mer information om dessa komponenter, se Windows Imaging-komponentens översikt.
Komponent | Beskrivning |
---|---|
Bitmappskodare (IWICBitmapDecoder) |
|
Avkoda bitmappram (IWICBitmapFrameDecode) |
|
Bitmappskodare (IWICBitmapEncoder) |
|
Bitma Frame Encode (IWICBitmapFrameEncode) |
|
I följande tabell beskrivs WIC-metadatakomponenterna. Med de här komponenterna kan du läsa och skriva metadata i en bild som exponeras av de komponenter som anges i föregående tabell.
Komponent | Beskrivning |
---|---|
Metadata Query Reader (IWICMetadataQueryReader) |
|
Metadata Query Writer (IWICMetadataQueryWriter) |
|
Metadatablockläsare (IWICMetadataBlockReader) |
|
Metadata Block Writer (IWICMetadataBlockWriter) |
|
Metadataläsare (IWICMetadataReader) |
|
Metadata Writer (IWICMetadataWriter) |
|
Snabb metadatakodareIWICFastMetadataEncoder |
|
Relaterade ämnen
-
konceptuell