Чтение метаданных изображения (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.
Что необходимо знать
Технологии
- Создание первого приложения среды выполнения Windows на JavaScript
- Windows.Storage.FileProperties.ImageProperties
- Windows.Graphics.Imaging
- Язык запросов метаданных компонента обработки изображений Windows (WIC)
Необходимые условия
- Предполагается, что вы умеете создавать простые приложения среды выполнения Windows на JavaScript. Дополнительные сведения см. в разделе о создании первого приложения среды выполнения Windows на JavaScript.
- Вы создали объект StorageFile или объект BitmapDecoder. Обе эти процедуры описаны в разделе Декодирование изображения.
Инструкции
Этап 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".