Como ler metadados de imagem (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente ]

Mostramos a você como recuperar metadados de um arquivo de imagem. Os formatos de imagem, como JPEG, TIFF e PNG, oferecem suporte a vários metadados incorporados que descrevem itens, como palavras-chave, localização do GPS e informações da câmera. Você pode acessar as propriedades de geração de imagens usadas com frequência, e obter acesso mais avançado aos metadados brutosarmazenados em formatos, como EXIF e XMP.

Há duas classes para acessar os metadados de imagens, dependendo do seu cenário: Windows.Storage.FileProperties.ImageProperties e Windows.Graphics.Imaging.BitmapPropertiesView.

Você pode usar a BitmapPropertiesView para obter as propriedades do Windows, como ImageProperties. Mas ele fornece acesso de nível inferior às estruturas de metadados nativas no arquivo usando a linguagem de consulta de metadados do WIC. Acessar os metadados nativos é um cenário mais avançado, mas lhe dá acesso a mais metadados do que o que é fornecido pelo sistema de propriedades Windows.

O que você precisa saber

Tecnologias

Pré-requisitos

Instruções

Etapa 1: Obter um objeto decodificador

Escreva o início de uma função que recebe um objeto BitmapDecoder e declare as variáveis nas quais as propriedades recuperadas serão armazenadas.

(function (decoder) {
      var orientation;
      var xmpCreator;

Use o decodificador para acessar os metadados da imagem. Se você ainda não tem um objeto de decodificador, veja Como decodificar uma imagem. Declare as variáveis aqui para mantê-las no escopo.

Etapa 2: Recuperar uma propriedade do Windows

A classe BitmapDecoder tem um membro BitmapProperties que é do tipo BitmapPropertiesView. Semelhante ao ImageProperties, você pode solicitar de forma assíncrona uma propriedade do Windows aceita passando uma lista de nomes de chave de propriedade.para o bitmapProperties.getPropertiesAsync.

Observação  Nem todas as propriedades são aceitas em cada formato. As políticas de metadados de fotos listam os formatos de imagem que aceitam cada propriedade.

 

     return 
decoder.bitmapProperties.getPropertiesAsync(["System.Photo.Orientation"])
     .then(function(retrievedProps) {

BitmapPropertiesView se comporta de forma diferente do ImageProperties em alguns aspectos importantes:

  • Você deve verificar a existência de uma propriedade antes de obtê-la da coleção. O método retorna um erro quando a propriedade não existe.
  • Cada valor de propriedade é do tipo BitmapTypedValue. Este objeto tem um membro Value que contém os dados reais e um membro Type, que indica os dados.
  • BitmapPropertiesView retorna um erro quando o formato da imagem não oferece suporte a uma propriedade solicitada. Você precisa tratar esses erros ou verificar se o código solicita somente as propriedades com suporte pelo formato de imagem. Por exemplo, os arquivos BMP não contêm nenhum metadado.

É assim que você deve procurar uma propriedade:

if (retrievedProperties.hasKey("System.Photo.Orientation") {
        orientation = retrievedProperties.lookup("System.Photo.Orientation").value;
    }     
}, function (error) {
    switch (error.number) {
        case -2003292287:
            // The image format does not support this property.
            break;
        case -2003292287:
            // The image format does not support metadata.
            break;
        default:
            // Catch any other errors.
            break;
    }
});

Etapa 3: Obter metadados de imagem nativa

Enquanto o ImageProperties está limitado às propriedades do Windows, BitmapPropertiesView lhe dá acesso à maioria dos metadados armazenados em uma imagem. Para obter uma lista dos formatos de metadados com suporte por cada codec de bitmap, veja Consultas de metadados de formato de imagem nativa.

Use o idioma de consulta dos metadados do WIC para procurar as propriedades semelhantes a como você usa as Propriedades System.Photo. Substitua o nome da propriedade por uma cadeia de caracteres de consulta de metadados.

Substitua o código que você escreveu na Etapa 2 por este código:

return decoder.bitmapProperties.getPropertiesAsync(["/xmp/dc:creator"])
.then(function(retrievedProps) {
    if (retrievedProperties.hasKey("/xmp/dc:creator") {
        xmpCreator = retrievedProperties.lookup("/xmp/dc:creator").value;
    }     
}, function (error) {
    switch (error.number) {
        case -2003292287:
            // The image format does not support this property.
            break;
        case -2003292287:
            // The image format does not support metadata.
            break;
        default:
            // Catch any other errors.
            break;
    }
});

Este trecho de código específico solicita os metadados do criador, conforme definido pelo esquema XMP Principal de Dublin. A consulta "/xmp/dc:creator" só é válida para imagens JPEG. Por exemplo, as imagens TIFF também oferecem suporte aos metadados XMP, mas a consulta TIFF equivalente é "/ifd/xmp/dc:creator".

Tópicos relacionados

Como decodificar uma imagem

Visão geral do idioma de consulta de metadados

Propriedades System.Photo

Como gravar metadados de imagens

Políticas de metadados de fotos