Поделиться через


Чтение метаданных изображения (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. В случае разработки приложений для Windows 10 см. раздел последняя документация]

Вы узнаете, как извлечь метаданные из файла изображения. Форматы изображений JPEG, TIFF и PNG поддерживают разнообразные внедренные метаданные, которые определяют такие аспекты, как ключевые слова, местоположение по GPS и сведения о камере. Вы можете обращаться к общим свойствам изображений и пользоваться расширенными возможностями доступа к необработанным метаданным, которые хранятся в таких форматах, как EXIF и XMP.

Существуют два класса, которые применяются для доступа к метаданным изображений в зависимости от сценария: Windows.Storage.FileProperties.ImageProperties и Windows.Graphics.Imaging.BitmapPropertiesView.

BitmapPropertiesView используется для получения свойств Windows, таких как ImageProperties. Этот класс предоставляет доступ нижнего уровня к собственным структурам метаданных в файле с использованием языка запросов метаданных WIC. Обращение к собственным метаданным является более сложным сценарием, но в этом случае вы получаете доступ к большему объему метаданных, чем обеспечивает система свойств Windows.

Что необходимо знать

Технологии

Необходимые условия

Инструкции

Этап 1: Получение объекта декодера

Запишите начало функции, которая получает объект BitmapDecoder, и объявите переменные для хранения загруженных свойств.

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

Используйте декодер для доступа к метаданным изображения. Если у вас нет объекта декодера, см. раздел Декодирование изображения. Объявите переменные здесь, чтобы сохранить их в области определения.

Этап 2: Получение свойства Windows

В класс BitmapDecoder входит элемент BitmapProperties с типом BitmapPropertiesView. Аналогично ImageProperties, можно асинхронно запросить поддерживаемое свойство Windows, передав список имен ключей для свойства методу bitmapProperties.getPropertiesAsync.

Примечание  Не все свойства поддерживаются каждым форматом. В политиках метаданных фотографий указано, какие форматы изображения поддерживают каждое свойство.

 

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

BitmapPropertiesView имеет несколько важных отличий от ImageProperties:

  • Вы должны убедиться, что свойство существует, прежде чем извлекать его из набора. Если свойство не существует, метод возвращает ошибку.
  • Значение каждого свойства имеет тип BitmapTypedValue. Этот объект имеет компонент Value, содержащий фактические данные, и компонент Type, который указывает данные.
  • BitmapPropertiesView возвращает ошибку, если формат изображения не поддерживает запрошенное свойство. Вам нужно либо исправить эти ошибки, либо убедиться, что ваш код запрашивает только свойства, которые поддерживаются форматом изображения. Например, BMP-файлы не содержат метаданных.

Вот как выполняется поиск свойства:

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;
    }
});

Этап 3: Извлечение собственных метаданных изображения

В то время как класс ImageProperties позволяет обращаться только к свойствам Windows, класс BitmapPropertiesView предоставляет доступ к большей части метаданных, которые хранятся в изображении. Список форматов метаданных, поддерживаемых каждым кодеком растрового изображения, см. в разделе Запросы собственных метаданных формата изображения.

Для поиска свойств применяется язык запросов метаданных WIC аналогично использованию свойств System.Photo. Замените имя свойства строкой запроса метаданных.

Замените код, написанный в шаге 2, следующим кодом:

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;
    }
});

Этот конкретный фрагмент кода запрашивает метаданные создателя согласно схеме XMP, предложенной организацией Dublin Core. Запрос "/xmp/dc:creator" действует только для изображений в формате JPEG. Например, изображения в формате TIFF также поддерживают метаданные XMP, но эквивалентный запрос метаданных TIFF будет "/ifd/xmp/dc:creator".

Связанные разделы

Декодирование изображения

Обзор языка запросов метаданных

Свойства System.Photo

Запись метаданных изображения

Политика метаданных фотографии