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


Общие сведения о метаданных WIC

В этом разделе приводятся сведения о поддержке метаданных изображений, предоставляемых компонентом образов Windows (WIC). В ней приведены общие сведения о чтении и написании метаданных изображения, языке запросов метаданных и расширяемости обработчика метаданных.

Метаданные изображения — это данные, внедренные в файл изображения, который предоставляет дополнительные сведения об изображении, например устройство, используемое для записи изображения или измерений изображения. Хотя он содержится в самом файле изображения, эти метаданные не являются частью данных отрисовки. WIC предоставляет интерфейсы, позволяющие считывать и записывать эти метаданные для нескольких распространенных форматов метаданных, включая расширяемую платформу метаданных (XMP), файл изображения Exchangeable (EXIF) и текстовые данные PNG (tEXt).

В этом разделе содержатся следующие разделы.

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

Чтобы понять эту тему, необходимо ознакомиться с интерфейсами кодировщика и декодировщика WIC, а также с соответствующими компонентами объектной модели компонентов (COM), как описано в обзоре компонента образов Windows. Кроме того, он помогает получить общее представление о некоторых форматах метаданных изображений, используемых сегодня.

Знакомство

Метаданные предоставляют расширенные сведения о изображении. Эти сведения можно использовать несколькими способами. Изображение может содержать метаданные, такие как описание, рейтинг, теги категорий и сведения об авторских правах. Доступ к метаданным упрощает выполнение таких задач, как управление ресурсами, расположение файлов или определение сведений об авторских правах. Например, коллекция фотографий Windows в Windows Vista позволяет добавлять описания и теги категорий в изображения. Это позволяет улучшить обнаружение изображений и удобный способ классификации изображений. Используя API-интерфейсы WIC и распространенные форматы метаданных, приложения могут легко записывать или читать эти метаданные в образах или из них.

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

jpeg-изображение с метаданными рейтинга

В этом примере метаданные внедрены в файл изображения в кадре изображения. Формат JPEG не поддерживает несколько кадров изображений, поэтому метаданные концептуально присоединены к этому одному кадру. Форматы, поддерживающие несколько кадров, например TIFF, могут содержать метаданные, присоединенные к каждому кадру изображения, как показано на этой схеме. Хотя и не поддерживается собственными кодеками изображений, некоторые форматы изображений также могут поддерживать метаданные за пределами кадра изображения. WIC достаточно гибкий, чтобы обрабатывать метаданные уровня кадра и метаданные за пределами отдельного кадра изображения.

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

API WIC предоставляют COM-компоненты, которые упрощают для приложений чтение и запись метаданных изображения.

Основным способом чтения метаданных является использование средства чтения запросов метаданных (IWICMetadataQueryReader) для доступа к определенным элементам метаданных. Компонент средства чтения метаданных реализуется кодеком и может быть доступен на уровне декодатора или с помощью отдельных кадров изображений, что является более распространенным методом. В следующем коде показано, как получить доступ к обработчику запросов для отдельного кадра с помощью метода GetMetadataQueryReader обработчика запросов.

// Get the query reader
if (SUCCEEDED(hr))
{
    hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}

Средство чтения запросов предоставляет методы для получения сведений о конкретных метаданных и средства для указания элемента метаданных для получения. В следующем коде используется выражение запроса для запроса определенного элемента метаданных в блоке каталога файлов вложенного образа App1 (IFD). Это делается путем использования метода GetMetadataByName объекта чтения запросов. Следующий код демонстрирует использование средства чтения запросов для получения значения оценки MicrosoftPhoto.

PROPVARIANT value;
PropVariantInit(&value);

LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";

if (SUCCEEDED(hr))
{
    hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}

Переменная pwzRatingQuery в предыдущем примере — это строка запроса для доступа к элементу метаданных MicrosoftPhoto. Эта строка создается с помощью языка запросов метаданных. Чтобы создать эту строку, необходимо знать формат метаданных и язык запросов метаданных для получения отдельных элементов метаданных. Дополнительные сведения о языке запросов метаданных см. в обзоре языка запросов метаданных.

За кулисами средство чтения запросов использует средство чтения метаданных (IWICMetadataReader) для доступа к метаданным, описанным выражением запроса. Помимо использования средства чтения запросов, вы также можете получить доступ к средству чтения метаданных непосредственно для чтения метаданных. Вы можете получить средство чтения метаданных из декодера или отдельных кадров, запрашивая средство чтения блоков (интерфейс IWICMetadataBlockReader).

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

Процесс записи метаданных аналогичен тому, как он считывается, за исключением того, что используется модуль записи запросов метаданных (IWICMetadataQueryWriter). Интерфейс записи запросов реализуется кодировщиком изображений и, как и в средстве чтения запросов, метаданные получают доступ как к кодировщику, так и к отдельным кадрам (в зависимости от поддержки формата изображения).

В следующем коде показано, как получить модуль записи запросов из кадра кодировщика и удалить значение оценки, которое было прочитано ранее.

// Get the frame's query writer
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}

if (SUCCEEDED(hr))
{
    hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}

Другой способ записи метаданных — это быстрые обновления метаданных. Быстрая кодировка метаданных — это способ записи метаданных изображения без необходимости повторного кодирования файла изображения. Это делается путем записи новых сведений метаданных в заполненную область формата метаданных. Кодировщик быстрых метаданных (IWICFastMetadataEncoder) получен из фабрики компонентов на основе декодатора изображений. Быстрая система кодировки метаданных затем получает модуль записи запросов, используемый для записи метаданных. Наконец, быстрый кодировщик фиксирует изменение.

В следующем коде показано, как получить быстрый кодировщик метаданных и использовать его для записи значения 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();
    }
}

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

За кулисами модуль записи запросов использует модуль записи метаданных (IWICMetadataWriter) для записи метаданных, описанных выражением запроса. Помимо использования средства чтения запросов, можно также непосредственно обращаться к записи метаданных. Модуль записи метаданных можно получить из декодера или отдельных кадров с помощью запроса для модуля записи блоков (интерфейса IWICMetadataBlockWriter).

Расширяемость метаданных

Как упоминалось ранее, WIC предоставляет несколько обработчиков метаданных для чтения и записи метаданных для общих форматов метаданных. Однако существуют некоторые форматы метаданных, которые не поддерживаются в собственном коде. Поэтому WIC предоставляет API-интерфейсы для создания дополнительных обработчиков метаданных, которые могут расширить поддержку метаданных в других форматах.

Чтобы полностью поддерживать другие форматы метаданных, необходимо разработать два типа обработчиков — обработчик для чтения метаданных и обработчик для записи метаданных. Хотя эти два обработчика обычно реализуются в парах для определенного формата, это не является обязательным требованием. В некоторых случаях может потребоваться только возможность чтения или только возможность записи.

Дополнительные сведения о расширяемости метаданных с помощью API WIC см. в обзоре расширяемости метаданных.

Поддерживаемые форматы метаданных

WIC поддерживает несколько распространенных форматов метаданных. В следующей таблице перечислены поддерживаемые форматы метаданных, их версии, форматы изображений, поддерживающие формат метаданных, а также форматы метаданных, поддерживающие быструю кодировку метаданных. Дополнительные сведения о быстрой кодировке метаданных см. в разделе записи метаданных изображения выше в этом документе.

Поддерживаемые форматы метаданных Версия спецификации метаданных Поддержка формата изображения Поддерживает быструю кодировку метаданных
App0 JFIF 1.02 JPEG Нет
App1 JFIF 1.02 JPEG, TIFF Нет
App13 Неизвестный JPEG, TIFF Нет
IFD TIFF 6.0 JPEG, TIFF Да
Этический комитет Неизвестный JPEG, TIFF Нет
Эксиф Exif 2.2 JPEG, TIFF Да
XMP XMP 1.0 (сентябрь 2005 г.) JPEG, TIFF Да
GPS Exif 2.2 JPEG, TIFF Да
IPTC IPTC 4.0 JPEG, TIFF Да
текст PNG 1.2 PNG Нет

 

Заметка

IPTC поддерживает только FME, если блоки растут в размерах, так как IPTC не поддерживает заполнение.

 

Сводка компонента метаданных

В следующей таблице описаны интерфейсы WIC, поддерживающие метаданные и соответствующие компоненты. Эти компоненты предоставляют доступ к метаданным образа. Дополнительные сведения об этих компонентах см. в обзоре компонентов обработки изображений Windows .

Компонент Описание
Декодер растровых изображений (IWICBitmapDecoder)
  • Считывает поток изображения и создает доступный для использования источник растрового изображения. Связан с форматом контейнера, таким как Tagged Image File Format (TIFF) или Joint Photographic Experts Group (JPEG).
  • Реализует интерфейс IWICMetadataBlockReader для перечисления всех блоков метаданных в потоке данных декодера, которые не находятся в кадре.
  • Предоставляет инструменту для чтения запросов возможность читать метаданные, связанные с изображением, которое не находится внутри кадра.
Декодирование растровых кадров (IWICBitmapFrameDecode)
  • Обращается к отдельным кадрам из потока изображения, удерживаемого декодером.
  • Реализует интерфейс IWICMetadataBlockReader для перечисления всех блоков метаданных в потоке данных кадра.
  • Предоставляет читателю запросов возможность читать метаданные, связанные с кадром, используя выражения запросов.
Кодировщик растровых карт (IWICBitmapEncoder)
  • Записывает источник растрового изображения в поток изображений. Связан с форматом контейнера, например TIFF или JPEG.
  • Реализует интерфейс IWICMetadataBlockWriter для создания списка блоков метаданных для записи в поток данных кодировщика.
  • Предоставляет создателю запросов возможность редактировать метаданные, связанные с изображением, используя выражения запросов.
Кодирование кадров Bitmap (IWICBitmapFrameEncode)
  • Создает кадр, который будет закодирован в поток, удерживаемый кодировщиком.
  • Реализует интерфейс IWICMetadataBlockWriter для составления списка блоков метаданных, которые будут записаны в поток данных кадра.
  • Предоставляет модуль записи запросов для записи метаданных, связанных с кадром, с помощью выражений запросов.

 

В следующей таблице описаны компоненты метаданных WIC. Эти компоненты позволяют считывать и записывать метаданные в образ, предоставляемый компонентами, перечисленными в предыдущей таблице.

Компонент Описание
Средство чтения запросов метаданных (IWICMetadataQueryReader)
  • Принимает строку запроса и перемещает базовую иерархию метаданных для получения метаданных.
Модуль записи запросов метаданных (IWICMetadataQueryWriter)
  • Принимает строку запроса и перемещает базовую иерархию метаданных для получения, задания и удаления метаданных.
Средство чтения блоков метаданных (IWICMetadataBlockReader)
  • Управляет доступной только для чтения коллекцией объектов IWICMetadataReader на верхнем уровне иерархии метаданных и позволяет перечислять все блоки метаданных.
  • Реализуется декодером растрового изображения и декодированным растровым кадром.
  • Реализован сторонними разработчиками компонентов для пользовательских кодеков.
Модуль записи блоков метаданных (IWICMetadataBlockWriter)
  • Управляет коллекцией для чтения и записи объектов IWICMetadataWriter в верхней части иерархии метаданных.
  • Реализуется кодировщиком растрового изображения и кодировщиком растрового кадра.
  • Реализован сторонними разработчиками компонентов для пользовательских кодеков.
Средство чтения метаданных (IWICMetadataReader)
  • Анализирует поток метаданных и управляет коллекцией элементов метаданных только для чтения. Связан с форматом метаданных, например EXIF, IFD и XMP.
  • Выступает в качестве словаря, возвращая значение при указании пары форматов и идентификаторов.
  • Реализован сторонними разработчиками компонентов для пользовательских типов метаданных.
Модуль записи метаданных (IWICMetadataWriter)
  • Анализирует и сериализует поток метаданных и управляет коллекцией для чтения и записи элементов метаданных.
  • Реализован сторонними разработчиками компонентов для пользовательских типов метаданных.
Быстрый кодировщик метаданныхIWICFastMetadataEncoder
  • Предоставляет семантику для записи в иерархии метаданных, которая будет обновлять метаданные на месте без повторной кодировки изображения.

 

концептуальные

Компонент обработки изображений Windows: Обзор

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

общие сведения о чтении и записи метаданных изображений

Обзор расширяемости метаданных

Руководство по перекодированию изображения JPEG с метаданными