Introducción a los metadatos de WIC
En este tema se presenta la compatibilidad de metadatos de creación de imágenes proporcionada por el componente de creación de imágenes de Windows (WIC). Proporciona una introducción a la lectura y escritura de metadatos de imagen, el lenguaje de consulta de metadatos y la extensibilidad del controlador de metadatos.
Los metadatos de imagen son datos incrustados dentro de un archivo de imagen que proporciona información adicional sobre la imagen, como el dispositivo usado para capturar la imagen o las dimensiones de la imagen. Aunque se encuentra dentro del propio archivo de imagen, estos metadatos no forman parte de los datos de representación. WIC proporciona interfaces que permiten leer y escribir estos metadatos para varios formatos de metadatos comunes, como Extensible Metadata Platform (XMP), Exchangeable Image File (EXIF) y Png Textual Data (tEXt).
En este tema se incluyen las siguientes secciones.
- Requisitos previos
- Introducción
- Leer metadatos de imagen
- Escribir metadatos de imagen
- Extensibilidad de metadatos
- Formatos de metadatos admitidos
- Resumen de componentes de metadatos
- Temas relacionados
Prerrequisitos
Para comprender este tema, debe estar familiarizado con las interfaces de codificador y descodificador WIC y sus componentes relacionados del Modelo de objetos componentes (COM), tal y como se describe en Información general del componente de imágenes de Windows. También ayuda a tener una familiaridad general con algunos de los formatos de metadatos de creación de imágenes que se usan hoy en día.
Introducción
Los metadatos proporcionan información extendida sobre una imagen. Esta información se puede usar de varias maneras. Una imagen puede contener metadatos como una descripción, clasificación, etiquetas de categoría e información de copyright. El acceso a los metadatos facilita la realización de tareas como la administración de recursos, la ubicación de los archivos o la determinación de la información de copyright. Por ejemplo, la Galería de fotos de Windows en Windows Vista permite agregar descripciones y etiquetas de categoría a imágenes. Esto permite una mejor detectabilidad de imágenes y una manera cómoda de clasificar imágenes. Con las API de WIC y los formatos de metadatos comunes, las aplicaciones pueden escribir o leer fácilmente este tipo de metadatos hacia o desde imágenes.
En el diagrama siguiente se muestra el contenido de un archivo JPEG que incluye bloques de metadatos incrustados y elementos de metadatos.
En esta imagen de ejemplo, los metadatos se incrustan en el archivo de imagen dentro de un marco de imagen. El formato JPEG no admite varios fotogramas de imagen, por lo que los metadatos se adjuntan conceptualmente a este único fotograma. Los formatos que admiten varios fotogramas, como TIFF, pueden tener metadatos adjuntos a cada fotograma de imagen, como se muestra en este diagrama. Aunque no es habitual actualmente y no es compatible con los códecs de imagen nativos, algunos formatos de imagen también pueden admitir metadatos fuera de un marco de imagen. WIC es lo suficientemente flexible como para controlar los metadatos de nivel de fotograma y los metadatos fuera del marco individual de una imagen.
Leer metadatos de imagen
Las API de WIC proporcionan componentes COM que facilitan a las aplicaciones leer y escribir metadatos de imagen.
La forma principal de leer metadatos es usar un lector de consultas de metadatos (IWICMetadataQueryReader) para acceder a elementos de metadatos específicos. El códec implementa el componente de lector de consultas de metadatos y se puede acceder a él en el nivel de descodificador o a través de fotogramas de imagen individuales, que es el método más común. En el código siguiente se muestra cómo obtener acceso a un lector de consultas para un marco individual mediante el método GetMetadataQueryReader del lector de consultas.
// Get the query reader
if (SUCCEEDED(hr))
{
hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}
Un lector de consultas proporciona métodos para obtener información sobre metadatos específicos y un medio para especificar un elemento de metadatos que se va a recuperar. El código siguiente usa una expresión de consulta para solicitar un elemento de metadatos específico dentro del bloque directorio de archivos de imagen anidado (IFD) de App1. Esto se hace mediante el método GetMetadataByName del lector de consultas. En el código siguiente se muestra el uso del lector de consultas para obtener el valor de clasificación de MicrosoftPhoto.
PROPVARIANT value;
PropVariantInit(&value);
LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";
if (SUCCEEDED(hr))
{
hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}
La variable pwzRatingQuery del ejemplo anterior es la cadena de consulta para tener acceso al elemento de metadatos Clasificación de MicrosoftPhoto. Esta cadena se crea mediante el lenguaje de consulta de metadatos. Para crear esta cadena, se necesita el conocimiento del formato de metadatos y el lenguaje de consulta de metadatos para recuperar elementos de metadatos individuales. Para obtener más información sobre el lenguaje de consulta de metadatos, consulte Introducción al lenguaje de consulta de metadatos.
En segundo plano, un lector de consultas usa un lector de metadatos (IWICMetadataReader) para acceder a los metadatos descritos por la expresión de consulta. Además de usar un lector de consultas, también puede acceder a un lector de metadatos directamente para leer los metadatos. Puede obtener un lector de metadatos del descodificador o fotogramas individuales consultando una interfaz de lector de bloques (IWICMetadataBlockReader).
Escribir metadatos de imagen
El proceso de escritura de metadatos es similar a la manera en que se lee, salvo que se usa un escritor de consultas de metadatos (IWICMetadataQueryWriter). El codificador de imágenes implementa la interfaz del escritor de consultas y, como en el lector de consultas, se accede a los metadatos tanto en el codificador como en fotogramas individuales (según la compatibilidad con el formato de imagen).
En el código siguiente se muestra cómo obtener un escritor de consultas de un marco de codificador y quitar el valor de clasificación que se leyó 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}");
}
Otra manera de escribir metadatos es mediante actualizaciones rápidas de metadatos. La codificación rápida de metadatos es una manera de escribir metadatos de imagen sin tener que volver a codificar un archivo de imagen. Esto se hace escribiendo nueva información de metadatos en una región rellenada del formato de metadatos. El codificador de metadatos rápido (IWICFastMetadataEncoder) se obtiene del generador de componentes, en función del descodificador de imágenes. A continuación, el codificador de metadatos rápido obtiene un escritor de consultas que se usa para escribir los metadatos. Por último, el codificador rápido confirma el cambio.
En el código siguiente se muestra cómo obtener un codificador de metadatos rápido y usarlo para escribir el 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();
}
}
No todos los formatos de metadatos admiten metadatos rápidos. Para ver qué formatos compatibles de forma nativa admiten la codificación rápida de metadatos, consulte la tabla de la sección Formatos de metadatos admitidos más adelante en este documento.
En segundo plano, un escritor de consultas usa un escritor de metadatos (IWICMetadataWriter) para escribir los metadatos descritos por la expresión de consulta. Además de usar un lector de consultas, también puede acceder a un escritor de metadatos directamente para escribir metadatos. Puede obtener un escritor de metadatos del descodificador o fotogramas individuales mediante la consulta de una interfaz de escritor de bloques (IWICMetadataBlockWriter).
Extensibilidad de metadatos
Como se mencionó anteriormente, WIC proporciona varios controladores de metadatos para leer y escribir metadatos para formatos de metadatos comunes. Sin embargo, hay algunos formatos de metadatos que no se admiten de forma nativa. Por lo tanto, WIC proporciona API para crear controladores de metadatos adicionales que pueden ampliar la compatibilidad con metadatos a otros formatos.
Para admitir totalmente otros formatos de metadatos, se deben desarrollar dos tipos de controladores: un lector de metadatos para leer metadatos y un escritor de metadatos para escribir metadatos. Aunque estos dos controladores normalmente se implementan en pares para un formato específico, no es un requisito. Puede haber algunos casos en los que solo se necesite la capacidad de lectura o solo la capacidad de escritura.
Para obtener más información sobre la extensibilidad de metadatos mediante las API de WIC, consulte Introducción a la extensibilidad de metadatos.
Formatos de metadatos admitidos
WIC proporciona compatibilidad con varios formatos de metadatos comunes. En la tabla siguiente se enumeran los formatos de metadatos admitidos, sus versiones, los formatos de imagen que admiten el formato de metadatos y si el formato de metadatos admite la codificación rápida de metadatos. Para obtener más información sobre la codificación rápida de metadatos, consulte la sección Escribir metadatos de imagen anteriormente en este documento.
Formatos de metadatos admitidos | Versión de especificación de metadatos | Compatibilidad con el formato de imagen | Admite la codificación rápida de metadatos |
---|---|---|---|
App0 | JFIF 1.02 | JPEG | No |
Aplicación 1 | JFIF 1.02 | JPEG, TIFF | No |
App13 | Desconocido | JPEG, TIFF | No |
IFD | TIFF 6.0 | JPEG, TIFF | Sí |
IRB | Desconocido | JPEG, TIFF | No |
Exif | Exif 2.2 | JPEG, TIFF | Sí |
XMP | XMP 1.0 (septiembre de 2005) | JPEG, TIFF | Sí |
GPS | Exif 2.2 | JPEG, TIFF | Sí |
IPTC | IPTC 4.0 | JPEG, TIFF | Sí |
Texto | PNG 1.2 | PNG | No |
Nota
IPTC solo admite FME si los bloques crecen en tamaño, ya que IPTC no admite relleno.
Resumen de componentes de metadatos
En la tabla siguiente se describen las interfaces WIC que admiten metadatos y sus componentes correspondientes. Estos componentes proporcionan el acceso a los metadatos de una imagen. Para obtener más información sobre estos componentes, consulta Información general del componente de creación de imágenes de Windows.
Componente | Descripción |
---|---|
Descodificador de mapa de bits (IWICBitmapDecoder) |
|
Descodificación de fotogramas de mapa de bits (IWICBitmapFrameDecode) |
|
Codificador de mapa de bits (IWICBitmapEncoder) |
|
Codificación de fotogramas bitma (IWICBitmapFrameEncode) |
|
En la tabla siguiente se describen los componentes de metadatos de WIC. Estos componentes permiten leer y escribir los metadatos en una imagen expuesta por los componentes enumerados en la tabla anterior.
Componente | Descripción |
---|---|
Lector de consultas de metadatos (IWICMetadataQueryReader) |
|
Escritor de consultas de metadatos (IWICMetadataQueryWriter) |
|
Lector de bloques de metadatos (IWICMetadataBlockReader) |
|
Escritor de bloques de metadatos (IWICMetadataBlockWriter) |
|
Lector de metadatos (IWICMetadataReader) |
|
Metadata Writer (IWICMetadataWriter) |
|
Fast Metadata EncoderIWICFastMetadataEncoder |
|
Temas relacionados
-
Conceptual
-
Información general sobre el componente de creación de imágenes de Windows
-
Información general sobre la lectura y escritura de metadatos de imagen
-
Procedimiento para volver a codificar una imagen JPEG con metadatos