Visão geral dos metadados do WIC
Este tópico apresenta o suporte a metadados de imagem fornecido pelo WIC (Componente de Imagem do Windows). Ele fornece uma introdução à leitura e gravação de metadados de imagem, à linguagem de consulta de metadados e à extensibilidade do manipulador de metadados.
Metadados de imagem são dados inseridos dentro de um arquivo de imagem que fornecem informações adicionais sobre a imagem, como o dispositivo usado para capturar a imagem ou as dimensões da imagem. Embora ele esteja contido no próprio arquivo de imagem, esses metadados não fazem parte dos dados de renderização. O WIC fornece interfaces que permitem ler e gravar esses metadados para vários formatos de metadados comuns, incluindo XMP (Extensible Metadata Platform), EXIF (Exchangeable Image File) e Png Textual Data (tEXt).
Este tópico inclui as seções a seguir.
- Pré-requisitos
- Introdução
- Lendo metadados de imagem
- Gravando metadados de imagem
- Extensibilidade de metadados
- Formatos de metadados com suporte
- Resumo do componente de metadados
- Tópicos relacionados
Pré-requisitos
Para entender este tópico, você deve estar familiarizado com as interfaces de codificador e decodificador wic e seus componentes com COM (Component Object Model) relacionados, conforme descrito na Visão geral do componente de imagem do Windows. Ele também ajuda a ter uma familiaridade geral com alguns dos formatos de metadados de imagem em uso hoje.
Introdução
Os metadados fornecem informações estendidas sobre uma imagem. Essas informações podem ser usadas de várias maneiras. Uma imagem pode conter metadados como uma descrição, classificação, marcas de categoria e informações de direitos autorais. Acessar os metadados facilita a execução de tarefas como gerenciamento de ativos, localização de arquivo ou determinação de informações de direitos autorais. Por exemplo, a Galeria de Fotos do Windows no Windows Vista permite adicionar descrições e marcas de categoria a imagens. Isso permite uma melhor descoberta de imagens e uma maneira conveniente de categorizar imagens. Usando as APIs wic e formatos de metadados comuns, os aplicativos podem facilmente gravar ou ler esse tipo de metadados de ou para imagens.
O diagrama a seguir ilustra o conteúdo de um arquivo JPEG que inclui blocos de metadados inseridos e itens de metadados.
Nesta imagem de exemplo, os metadados são inseridos no arquivo de imagem dentro de um quadro de imagem. O formato JPEG não dá suporte a vários quadros de imagem, portanto, os metadados são anexados conceitualmente a esse único quadro. Formatos que dão suporte a vários quadros, como TIFF, podem ter metadados anexados a cada quadro de imagem, como mostra este diagrama. Embora não seja comum atualmente e não seja compatível com codecs de imagem nativos, alguns formatos de imagem também podem dar suporte a metadados fora de um quadro de imagem. O WIC é flexível o suficiente para lidar com metadados no nível do quadro e metadados fora do quadro individual de uma imagem.
Lendo metadados de imagem
As APIs do WIC fornecem componentes COM que facilitam a leitura e gravação de metadados de imagem pelos aplicativos.
A principal maneira de ler metadados é usar um leitor de consulta de metadados (IWICMetadataQueryReader) para acessar itens de metadados específicos. O componente leitor de consulta de metadados é implementado pelo codec e pode ser acessado no nível do decodificador ou por meio de quadros de imagem individuais, que é o método mais comum. O código a seguir demonstra como acessar um leitor de consulta para um quadro individual usando o método GetMetadataQueryReader do leitor de consulta.
// Get the query reader
if (SUCCEEDED(hr))
{
hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}
Um leitor de consulta fornece métodos para obter informações sobre metadados específicos e um meio de especificar um item de metadados a ser recuperado. O código a seguir usa uma expressão de consulta para solicitar um item de metadados específico dentro do bloco IFD (diretório de arquivo de imagem aninhado) do App1. Isso é feito usando o método GetMetadataByName do leitor de consulta. O código a seguir demonstra como usar o leitor de consulta para obter o valor de classificação do MicrosoftPhoto.
PROPVARIANT value;
PropVariantInit(&value);
LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";
if (SUCCEEDED(hr))
{
hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}
A variável pwzRatingQuery no exemplo anterior é a cadeia de caracteres de consulta para acessar a classificação MicrosoftPhoto do item de metadados. Essa cadeia de caracteres é criada usando a linguagem de consulta de metadados. Para criar essa cadeia de caracteres, é necessário conhecimento do formato de metadados e da linguagem de consulta de metadados para recuperar itens de metadados individuais. Para obter mais informações sobre a linguagem de consulta de metadados, consulte a Visão geral da linguagem de consulta de metadados.
Nos bastidores, um leitor de consulta usa um leitor de metadados (IWICMetadataReader) para acessar os metadados descritos pela expressão de consulta. Além de usar um leitor de consulta, você também pode acessar um leitor de metadados diretamente para ler metadados. Você pode obter um leitor de metadados do decodificador ou quadros individuais consultando uma interface de leitor de bloco (IWICMetadataBlockReader).
Gravando metadados de imagem
O processo de gravação de metadados é semelhante à maneira como são lidos, exceto pelo uso de um gravador de consulta de metadados (IWICMetadataQueryWriter). A interface do gravador de consulta é implementada pelo codificador de imagem e, como no leitor de consulta, os metadados são acessados no codificador e em quadros individuais (dependendo do suporte ao formato de imagem).
O código a seguir demonstra como obter um gravador de consulta de um quadro de codificador e remover o valor de classificação que foi lido anteriormente.
// Get the frame's query writer
if (SUCCEEDED(hr))
{
hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}
if (SUCCEEDED(hr))
{
hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}
Outra maneira de gravar metadados é por meio de atualizações rápidas de metadados. A codificação rápida de metadados é uma maneira de gravar metadados de imagem sem precisar codificar novamente um arquivo de imagem. Isso é feito escrevendo novas informações de metadados em uma região acolchoada do formato de metadados. O codificador de metadados rápido (IWICFastMetadataEncoder) é obtido da fábrica de componentes, com base no decodificador de imagem. Em seguida, o codificador de metadados rápido obtém um gravador de consulta usado para gravar os metadados. Por fim, o codificador rápido confirma a alteração.
O código a seguir demonstra como obter um codificador de metadados rápido e usá-lo para gravar o valor 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();
}
}
Nem todos os formatos de metadados dão suporte a metadados rápidos. Para ver quais formatos com suporte nativo dão suporte à codificação rápida de metadados, consulte a tabela na seção Formatos de metadados com suporte mais adiante neste documento.
Nos bastidores, um gravador de consulta usa um gravador de metadados (IWICMetadataWriter) para gravar os metadados descritos pela expressão de consulta. Além de usar um leitor de consulta, você também pode acessar um gravador de metadados diretamente para gravar metadados. Você pode obter um gravador de metadados do decodificador ou quadros individuais usando a consulta de uma interface de gravador de bloco (IWICMetadataBlockWriter).
Extensibilidade de metadados
Conforme mencionado anteriormente, o WIC fornece vários manipuladores de metadados para ler e gravar metadados para formatos de metadados comuns. No entanto, há alguns formatos de metadados que não têm suporte nativo. Portanto, o WIC fornece APIs para criar manipuladores de metadados adicionais que podem estender o suporte a metadados para outros formatos.
Para dar suporte total a outros formatos de metadados, dois tipos de manipuladores devem ser desenvolvidos : um leitor de metadados para ler metadados e um gravador de metadados para gravar metadados. Embora esses dois manipuladores geralmente sejam implementados em pares para um formato específico, isso não é um requisito. Pode haver alguns casos em que apenas a capacidade de leitura ou apenas a capacidade de gravação é necessária.
Para obter mais informações sobre extensibilidade de metadados usando as APIs wic, consulte a Visão geral da extensibilidade de metadados.
Formatos de metadados com suporte
O WIC dá suporte a vários formatos de metadados comuns. A tabela a seguir lista os formatos de metadados com suporte, suas versões, os formatos de imagem que dão suporte ao formato de metadados e se o formato de metadados dá suporte à codificação rápida de metadados. Para obter mais informações sobre a codificação rápida de metadados, consulte a seção Escrevendo metadados de imagem anteriormente neste documento.
Formatos de metadados com suporte | Versão da especificação de metadados | Suporte ao formato de imagem | Dá suporte à codificação de metadados rápida |
---|---|---|---|
App0 | JFIF 1.02 | JPEG | Não |
Aplicativo1 | JFIF 1.02 | JPEG, TIFF | Não |
App13 | Unknown | JPEG, TIFF | Não |
IFD | TIFF 6.0 | JPEG, TIFF | Sim |
IRB | Unknown | JPEG, TIFF | Não |
Exif | Exif 2.2 | JPEG, TIFF | Sim |
XMP | XMP 1.0 (setembro de 2005) | JPEG, TIFF | Sim |
GPS | Exif 2.2 | JPEG, TIFF | Sim |
IPTC | IPTC 4.0 | JPEG, TIFF | Sim |
Texto | PNG 1.2 | PNG | Não |
Observação
O IPTC só dá suporte ao FME se os blocos aumentarem de tamanho, pois o IPTC não dá suporte ao preenchimento.
Resumo do componente de metadados
A tabela a seguir descreve as interfaces WIC que dão suporte a metadados e seus componentes correspondentes. Esses componentes fornecem o acesso aos metadados de uma imagem. Para obter mais informações sobre esses componentes, consulte Visão geral do componente de imagem do Windows.
Componente | Descrição |
---|---|
Decodificador de Bitmap (IWICBitmapDecoder) |
|
Decodificação de quadro de bitmap (IWICBitmapFrameDecode) |
|
Codificador bitmap (IWICBitmapEncoder) |
|
Codificação de quadro de bitma (IWICBitmapFrameEncode) |
|
A tabela a seguir descreve os componentes de metadados do WIC. Esses componentes permitem que você leia e escreva os metadados em uma imagem exposta pelos componentes listados na tabela anterior.
Componente | Descrição |
---|---|
Leitor de Consulta de Metadados (IWICMetadataQueryReader) |
|
Gravador de Consulta de Metadados (IWICMetadataQueryWriter) |
|
Leitor de Bloco de Metadados (IWICMetadataBlockReader) |
|
Gravador de Bloco de Metadados (IWICMetadataBlockWriter) |
|
Leitor de metadados (IWICMetadataReader) |
|
Gravador de Metadados (IWICMetadataWriter) |
|
Codificador de metadados rápidoIWICFastMetadataEncoder |
|
Tópicos relacionados
-
Conceitual