Panoramica dei metadati WIC
In questo argomento viene presentato il supporto dei metadati per la creazione di immagini fornito dal componente Windows Imaging (WIC). Fornisce un'introduzione alla lettura e alla scrittura di metadati dei metadati, al linguaggio di query dei metadati e all'estendibilità del gestore dei 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 testo png (tEXt).
In questo argomento sono contenute le sezioni seguenti.
- Prerequisiti
- Introduzione
- Lettura dei metadati dell'immagine
- Scrittura di metadati immagine
- Estensibilità dei metadati
- Formati di metadati supportati
- Riepilogo dei componenti dei 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 in Cenni preliminari sul componente Windows Imaging. Consente inoltre di acquisire familiarità generale con alcuni dei formati di metadati di creazione dell'immagine 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, ad esempio 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, Raccolta foto di Windows 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 fotogramma immagine, come illustrato in questo diagramma. Anche se attualmente non è comune e non è supportato dai codec immagine nativi, alcuni formati di immagine possono supportare anche i metadati all'esterno di un frame di immagine. WiC è abbastanza flessibile per gestire sia i metadati a livello di fotogramma che i metadati all'esterno 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 dei 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. Questa operazione viene eseguita usando 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 sui metadati.
Dietro le quinte, 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 a un lettore di metadati direttamente per leggere i metadati. È possibile ottenere un lettore di metadati dal decodificatore o dai singoli fotogrammi eseguendo una query per un'interfaccia IWICMetadataBlockReader (IWICMetadataBlockReader).
Scrittura di metadati 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 dell'immagine).
Il codice seguente illustra come ottenere un writer di query da un frame 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. Questa operazione viene eseguita scrivendo nuove informazioni sui metadati in un'area riempita del formato dei metadati. Il codificatore di metadati veloce (IWICFastMetadataEncoder) viene ottenuto dalla factory dei componenti, in base al decodificatore di immagini. Il codificatore di metadati veloce ottiene quindi un writer di query usato per scrivere i metadati. Infine, il codificatore rapido esegue il commit della 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, un writer di query usa un writer 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 un writer di metadati dal decodificatore o dai singoli fotogrammi usando l'esecuzione di query per un'interfaccia IWICMetadataBlockWriter (IWICMetadataBlockWriter).
Estensibilità 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. Windows Information Protection fornisce quindi API per la creazione di gestori di metadati aggiuntivi in grado di 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 di 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 solo FME se i blocchi aumentano di dimensioni, perché IPTC non supporta la spaziatura interna.
Riepilogo dei componenti dei metadati
Nella tabella seguente vengono descritte le interfacce WIC che supportano i metadati e i relativi componenti corrispondenti. Questi componenti forniscono l'accesso ai metadati di un'immagine. Per altre informazioni su questi componenti, vedere Panoramica del componente di Creazione immagini 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) |
|
Writer di query dei metadati (IWICMetadataQueryWriter) |
|
Lettore blocchi di metadati (IWICMetadataBlockReader) |
|
Writer dei blocchi di metadati (IWICMetadataBlockWriter) |
|
Lettore metadati (IWICMetadataReader) |
|
Writer dei metadati (IWICMetadataWriter) |
|
Codificatore di metadati veloceIWICFastMetadataEncoder |
|
Argomenti correlati
-
Informazioni concettuali
-
Panoramica della lettura e della scrittura dei metadati dell'immagine
-
Procedura: Codificare nuovamente un'immagine JPEG con metadati