Panoramica dei metadati WIC
In questo argomento viene introdotto il supporto dei metadati di creazione dell'immagine fornito dal componente Windows Imaging (WIC). Fornisce un'introduzione alla lettura e alla scrittura dei metadati delle immagini, al linguaggio di query dei metadati e all'estendibilità del gestore di metadati.
I metadati dell'immagine sono dati incorporati all'interno di un file di immagine che fornisce informazioni aggiuntive sull'immagine, ad esempio il dispositivo usato per acquisire l'immagine o le dimensioni dell'immagine. Anche se è contenuto all'interno del file di immagine stesso, questi metadati non fanno parte dei dati di rendering. WIC fornisce interfacce che consentono di leggere e scrivere questi metadati per diversi formati di metadati comuni, tra cui Extensible Metadata Platform (XMP), File di immagini scambiabili (EXIF) e Dati testuali Png (tEXt).
Questo argomento contiene le sezioni seguenti.
- Prerequisiti
- Introduzione
- lettura dei metadati dell'immagine
- scrittura di metadati immagine
- Estendibilità dei metadati
- Formati di Metadati Supportati
- riepilogo del componente metadati
- argomenti correlati
Prerequisiti
Per comprendere questo argomento, è necessario avere familiarità con le interfacce del codificatore e del decodificatore WIC e i relativi componenti COM (Component Object Model), come descritto nella panoramica del componente di creazione immagini di Windows . Consente inoltre di acquisire familiarità generale con alcuni formati di metadati di imaging attualmente in uso.
Introduzione
I metadati forniscono informazioni estese su un'immagine. Queste informazioni possono essere usate in diversi modi. Un'immagine può contenere metadati come una descrizione, una classificazione, tag di categoria e informazioni sul copyright. L'accesso ai metadati semplifica l'esecuzione di attività come la gestione degli asset, il percorso dei file o la determinazione delle informazioni sul copyright. Ad esempio, Windows Photo Gallery in Windows Vista consente di aggiungere descrizioni e tag di categoria alle immagini. Ciò consente una migliore individuabilità delle immagini e un modo pratico per classificare le immagini. Usando le API WIC e i formati di metadati comuni, le applicazioni possono scrivere o leggere facilmente questo tipo di metadati da o verso immagini.
Il diagramma seguente illustra il contenuto di un file JPEG che include blocchi di metadati incorporati e elementi di metadati.
In questa immagine di esempio i metadati vengono incorporati nel file di immagine all'interno di un frame di immagine. Il formato JPEG non supporta più fotogrammi di immagine, quindi i metadati sono concettualmente collegati a questo singolo fotogramma. I formati che supportano più fotogrammi, ad esempio TIFF, possono avere metadati collegati a ogni frame di immagine, come illustrato in questo diagramma. Anche se non sono attualmente comuni e non sono supportati dai codec immagine nativi, alcuni formati di immagine possono supportare anche metadati esterni a un frame di immagine. WiC è abbastanza flessibile per gestire metadati a livello di fotogramma e metadati al di fuori del singolo frame di un'immagine.
Lettura dei metadati dell'immagine
Le API WIC forniscono componenti COM che semplificano la lettura e la scrittura dei metadati delle immagini da parte delle applicazioni.
Il modo principale per leggere i metadati consiste nell'usare un lettore di query di metadati (IWICMetadataQueryReader) per accedere a elementi di metadati specifici. Il componente lettore di query dei metadati viene implementato dal codec e può essere accessibile a livello di decodificatore o tramite singoli fotogrammi di immagine, che è il metodo più comune. Il codice seguente illustra come accedere a un lettore di query per un singolo frame usando il metodo GetMetadataQueryReader del lettore di query.
// Get the query reader
if (SUCCEEDED(hr))
{
hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}
Un lettore di query fornisce metodi per ottenere informazioni su metadati specifici e un mezzo per specificare un elemento di metadati da recuperare. Il codice seguente usa un'espressione di query per richiedere un elemento di metadati specifico all'interno del blocco IFD (Nested Image File Directory) di App1. A tale scopo, usare il metodo getMetadataByName del lettore di query. Il codice seguente illustra l'uso del lettore di query per ottenere il valore di classificazione MicrosoftPhoto.
PROPVARIANT value;
PropVariantInit(&value);
LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";
if (SUCCEEDED(hr))
{
hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}
La variabile pwzRatingQuery nell'esempio precedente è la stringa di query per accedere alla classificazione MicrosoftPhoto dell'elemento di metadati. Questa stringa viene creata usando il linguaggio di query dei metadati. Per creare questa stringa, è necessario conoscere il formato dei metadati e il linguaggio di query dei metadati per recuperare singoli elementi di metadati. Per altre informazioni sul linguaggio di query dei metadati, vedere Panoramica del linguaggio di query dei metadati .
In background, un lettore di query usa un lettore di metadati (IWICMetadataReader) per accedere ai metadati descritti dall'espressione di query. Oltre a usare un lettore di query, è anche possibile accedere direttamente a un lettore di metadati per leggere i metadati. È possibile ottenere un lettore di metadati dal decodificatore o dai singoli fotogrammi eseguendo una query per un lettore di blocchi (interfaccia IWICMetadataBlockReader).
Scrittura di metadati dell'immagine
Il processo di scrittura dei metadati è simile al modo in cui viene letto, ad eccezione del fatto che viene usato un writer di query di metadati (IWICMetadataQueryWriter). L'interfaccia del writer di query viene implementata dal codificatore di immagini e, come nel lettore di query, i metadati sono accessibili sia nel codificatore che nei singoli fotogrammi (a seconda del supporto del formato di immagine).
Il codice seguente illustra come ottenere uno scrittore di query da un fotogramma del codificatore e rimuovere il valore di classificazione letto in precedenza.
// Get the frame's query writer
if (SUCCEEDED(hr))
{
hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}
if (SUCCEEDED(hr))
{
hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}
Un altro modo per scrivere metadati consiste nell'usare aggiornamenti rapidi dei metadati. La codifica rapida dei metadati è un modo per scrivere metadati di immagine senza dover codificare nuovamente un file di immagine. Questo viene fatto scrivendo nuove informazioni sui metadati in una regione imbottita del formato dei metadati. Il codificatore di metadati rapido (IWICFastMetadataEncoder) viene ottenuto dalla fabbrica dei componenti, a seconda del decodificatore di immagini. Il codificatore rapido di metadati ottiene quindi un generatore di query usato per scrivere i metadati. Infine, il codificatore rapido applica la modifica.
Il codice seguente illustra come ottenere un codificatore di metadati rapido e usarlo per scrivere il valore MicrosoftRating.
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();
}
}
Non tutti i formati di metadati supportano metadati veloci. Per vedere quali formati supportati in modo nativo supportano la codifica rapida dei metadati, vedere la tabella nella sezione Formati di metadati supportati più avanti in questo documento.
Dietro le quinte, uno scrittore di query utilizza uno scrittore di metadati (IWICMetadataWriter) per scrivere i metadati descritti dall'espressione di query. Oltre a usare un lettore di query, è anche possibile accedere a un writer di metadati direttamente per scrivere metadati. È possibile ottenere uno scrittore di metadati dal decodificatore o dai singoli fotogrammi eseguendo una query per l'interfaccia dello scrittore di blocchi (IWICMetadataBlockWriter).
Estendibilità dei metadati
Come accennato in precedenza, WIC fornisce diversi gestori di metadati per leggere e scrivere metadati per i formati di metadati comuni. Esistono tuttavia alcuni formati di metadati non supportati in modo nativo. Di conseguenza, WIC fornisce API per la creazione di gestori di metadati aggiuntivi che possono estendere il supporto dei metadati ad altri formati.
Per supportare completamente altri formati di metadati, è necessario sviluppare due tipi di gestori, ovvero un lettore di metadati per leggere i metadati e un writer di metadati per scrivere metadati. Anche se questi due gestori vengono in genere implementati in coppie per un formato specifico, questo non è un requisito. Potrebbero verificarsi alcuni casi in cui è necessaria solo la capacità di lettura o solo la capacità di scrittura.
Per altre informazioni sull'estendibilità dei metadati tramite le API WIC, vedere panoramica dell'estendibilità dei metadati .
Formati di metadati supportati
WIC offre supporto per diversi formati di metadati comuni. Nella tabella seguente sono elencati i formati di metadati supportati, le relative versioni, i formati di immagine che supportano il formato dei metadati e se il formato dei metadati supporta la codifica rapida dei metadati. Per altre informazioni sulla codifica rapida dei metadati, vedere la sezione Scrittura di metadati immagine più indietro in questo documento.
Formati di metadati supportati | Versione della specifica dei metadati | Supporto del formato immagine | Supporta la codifica rapida dei metadati |
---|---|---|---|
App0 | JFIF 1.02 | JPEG | No |
App1 | JFIF 1.02 | JPEG, TIFF | No |
App13 | Sconosciuto | JPEG, TIFF | No |
IFD | TIFF 6.0 | JPEG, TIFF | Sì |
IRB | Sconosciuto | JPEG, TIFF | No |
Exif | Exif 2.2 | JPEG, TIFF | Sì |
XMP | XMP 1.0 (settembre 2005) | JPEG, TIFF | Sì |
GPS | Exif 2.2 | JPEG, TIFF | Sì |
IPTC | IPTC 4.0 | JPEG, TIFF | Sì |
Testo | PNG 1.2 | PNG | No |
Nota
IPTC supporta FME solo se i blocchi aumentano di dimensioni, poiché IPTC non supporta il riempimento.
Riepilogo dei componenti dei metadati
La tabella seguente descrive le interfacce WIC che supportano i metadati e i relativi componenti corrispondenti. Questi componenti forniscono l'accesso ai metadati di un'immagine. Per ulteriori informazioni su questi componenti, consultare Panoramica del componente Imaging di Windows.
Componente | Descrizione |
---|---|
Decodificatore bitmap (IWICBitmapDecoder) |
|
Decodifica frame bitmap (IWICBitmapFrameDecode) |
|
Codificatore bitmap (IWICBitmapEncoder) |
|
Codifica frame bitma (IWICBitmapFrameEncode) |
|
La tabella seguente descrive i componenti dei metadati wic. Questi componenti consentono di leggere e scrivere i metadati in un'immagine esposta dai componenti elencati nella tabella precedente.
Componente | Descrizione |
---|---|
Lettore di query dei metadati (IWICMetadataQueryReader) |
|
Scrittore di query sui metadati (IWICMetadataQueryWriter) |
|
Lettore di blocchi di metadati (IWICMetadataBlockReader) |
|
Scrittore di blocchi di metadati (IWICMetadataBlockWriter) |
|
Lettore di metadati (IWICMetadataReader) |
|
Scrittore di metadati (IWICMetadataWriter) |
|
Fast Metadata EncoderIWICFastMetadataEncoder |
|
Argomenti correlati
-
Concettuale
-
Panoramica componente Windows Imaging
-
Panoramica della lettura e scrittura dei metadati dell'immagine
-
Procedura: Codificare nuovamente un'immagine JPEG con metadati