Formato Exif

www.altova.com Expandir/Contraer todos Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Objetos y características de diseño > Imágenes >

Formato Exif

El formato de archivo de imagen intercambiable (Exif) es un estándar que especifica los formatos de la imagen usados por algunas cámaras digitales y cámaras de teléfonos inteligentes. Las etiquetas metadatos del estándar Exif albergan una gran variedad de información que varía desde la fecha-hora de la imagen y la geolocalización a la configuración de la cámara y los detalles de composición de la imagen. Cuando una imagen Exif se convierte en una imagen codificada en Base64, los metadatos de la imagen también se convierten a Base64 y se encuentran disponibles para su recuperación.

 

Note:No todas las cámaras digitales o teléfonos inteligentes proporcionan datos Exif.

 

La funcionabilidad Exif de MobileTogether Designer

MobileTogether Designer proporciona la siguiente funcionabilidad relacionada con Exif:

 

La acción "Permite elegir la imagen al usuario" proporciona una opción que inicia la aplicación de la cámara en el dispositivo cliente del usuario final. La foto que se hace, se guarda en un nodo XML como imagen codificada en Base64. Si la aplicación de la cámara usa el formato Exif, entonces los metadatos también se guardan en la imagen codificada en Base64. Estos datos se encuentran disponibles para una recuperación inmediata desde el nodo XML.
Una función de extensión XPath de Altova llamada image-exif-data toma como argumento una imagen JPEG con codificación Base64 y devuelve los metadatos Exif que están contenidos en la cadena como pares de atributo-valor. (Consulte la descripción de la función image-exif-data para obtener más información.) Para encontrar las dimensiones de las imágenes solamente utilice la función de extensión XPath de MobileTogether mt-image-width-and height.
Una función de extensión XPath de Altova conocida como suggested-image-file-extension toma una cadena Base64 como su argumento y devuelve una extensión de archivo de la imagen (tal como jpg, png, bmp). Esto resulta de utilidad para detectar de forma automática el formato de la imagen correcta y guardar el archivo con una extensión de archivo apropiada.
La acción Cargar o guardar imagen en archivo activa una imagen codificada en Base64 que se guarda en un formato de imagen binario (como jpg, png, bmp). Los datos Exif se guardan en el texto codificado en Base64.

 

El próxima ejemplo le explica cómo recuperar datos Exif desde una imagen codificada en Base64 y cómo se pueden usar estos datos en una solución.

 

Nota:Los datos Exif se perderán si la imagen cambia de tamaño o se rota.

 

Archivo de ejemplo: Base64Images.mtd

El archivo de diseño Base64Images.mtd se localiza en la carpeta ((Mis) Documentos de MobileTogether: MobileTogetherDesignerExamples\Tutorials\Images. Puede abrir este archivo en el MobileTogether Designer, ejecútelo en el simulador (F5) y consulte las definiciones del diseño. El archivo por defecto del diseño contiene una imagen con los metadatos Exif.

 

 

Click to expand/collapseDiseño básico

 

El diseño básico usa las imágenes codificadas en Base64 que se almacenan en el archivo XML Base64Images.xml que también se encuentra localizado en la carpeta Tutorials\Images). La estructura del archivo XML aparece en la captura de pantalla siguiente. El elemento images presenta seis elementos secundarios, cada uno de los cuales presenta una imagen con un formato diferente que se guardan como una cadena de texto en Base64. Contiene una imagen con metadatos Exif (el elemento exif). La estructura en árbol $PERSISTENT se usa para guardar las selecciones de usuarios temporales (ComboBoxValue) y los metadatos Exif (ExifData).

MTDBase64ImagesTut01

La parte superior del diseño (captura de pantalla siguiente) presenta una etiqueta para el título de la página y dos tablas. El diseño de esta parte de la página se describe en el apartado anterior, Imágenes codificadas en Base64. El objtetivo es permitir al usuario final que seleccione un tipo de imagen en el cuadro combinado. Esta selección determina qué imagen codificada en Base64 del archivo XML hay que seleccionar para que se visualice en la celda justo en la parte derecho del cuadro combinado.

MTDBase64ImagesTut02Design

ISi el usuario selecciona el elemento exif del cuadro combinado, entonces se mostrará la imagen codificada en Base64 en el elemento exif del archivo XML. Los metadatos Exif se muestran en dos tablas ("Datos Exif seleccionados de la imagen" y "Metadatos Exif de la imagen seleccionada"; consulte la captura de pantalla siguiente del simulador). Si expande la estructura en árbol $PERSISTENT en el panel "Datos XML" del simulador, verá los datos Exif  que se han recuperado de la cadena Base64. A continuación se describe el diseño de las dos tablas de visualización de datos Exif. Consulte el apartado anterior, Base64-Encoded Images para obtener una descripción detallada de otras partes del diseño.

Click to expand/collapse

 

 

Click to expand/collapseDatos Exif seleccionados de la imagen

 

Los datos Exif seleccionados se presentan en una tabla estática que consta de dos columnas y de varias filas (consulte la captura de pantalla siguiente).
La primera columna contiene etiquetas; la segunda columna contiene "Editar campos", cada uno de los cuales presenta una expresión XPath que devuelve una pieza de los metadatos Exif.
 
Click to expand/collapse
 
La información sobre el tipo de imagen se obtiene de la cadena textual codificada en Base64 usando la función de extensión XPath de Altova suggested-image-file-extension Esta función toma una cadena (imagen Base64) como su argumento y recupera la información de la extensión del archivo desde la cadena. Si no existe información disponible sobre la extensión del archivo en la cadena Base64, entonces la función devuelve la cadena vacía. La expresión XPath que se utiliza es la siguiente: :
 
for $k in suggested-image-file-extension($XML1/images/element()[local-name() eq $PERSISTENT/Root/ComboBoxValue]) 
return if ($k != ''then $k else "Data not available" 
 
La expresión proporciona cadenas de retorno alternativas dependiendo de si la función devuelve una cadena  que no está vacía o una cadena vacía. Si lo que se devuelve es una cadena que no está vacía, enotnces se muestra la cadena: Si lo que se devuelve es una cadena vacía, aparecerá el mensaje correspondiente.
El resto de expresiones XPath de la tabla (además de la primera fila) usan la función de extensión XPath de Altova image-exif-data para obtener una fragmento de los metadatos Exif. Esta función toma una cadena (imagen Base64) como su argumento y devuelve el nodo del elemento (llamado Exif) con atributos que retienen los metadatos Exif. Cada par atributo-valor se corresponde con una etiqueta de metadatos Exif. En la siguiente expresión, la función image-exif-data devuelve el elemento Exif con varios atributos. La información de los metadatos que queremos obtener con esta expresión es la anchura de la imagen. Esta información se almacena en el nodo del atributo @PixelXDimension  del elemento Exif.
 
for $k in $PERSISTENT/Root/ExifData/Exif 
return if ($k/@PixelXDimension !=''then $k/@PixelXDimension else "Data not available" 
 
La expresión comprueba si el nodo Exif/@PixelXDimension se encuentra vacío o no. Si no se encuentra vacío, entonces aparece la cadena, de lo contrario aparece el mensaje correspondiente.
Para obtener más información sobre la función image-exif-data, consulte su descripción en la sección de las funciones de extensión de Altova.
Observe el último valor Geolocalización en la tabla. Se obtiene mediante un atributo Exif/@Geolocation creado por Altova.
El nodo $PERSISTENT/Root/ExifData está poblado con los datos Exif anexándole un nodo secundario que contiene el resultado de la función image-exif-data Para realizarlo se especifica una acción "Anexar nodo" en el cuadro combinado que selecciona la imagen que se va a mostrar (consulte la captura de pantalla siguiente). El evento OnFinishEditing del cuadro combinado desencadena la opción.

 
MTDExifTut02
 
Tenga en cuenta los siguientes puntos:
(i) La expresión del localizador de XPath en la acción "Anexar nodo" localiza el nodo en el archivo XML que tiene el mimso nombre que la cadena en $PERSISTENT/Root/ComboBoxValue.
(ii) El nodo $PERSISTENT/Root/ExifData se borrar antes que los datos Exif (en el nodo Exif) se anexen a ExifData.
(iii) Se ha configurado una acción de la página para que borre el nood Exif node dentro de la estructura en árbol $PERSISTENT. Esto evita una posible incongruencia entre la imagen inicial (jpg) y los datos Exif anteriores en el nodo ExifData.

 

 

Click to expand/collapseTodos los datos Exif de la imagen

 

Una tabla con una fila de repetición (consulte la captura de pantalla del diseño situada abajo en la parte izquierda; vista del simulador abajo a la derecha) se usa para mostrar todas las parejas atributos-valores devueltas por la función image-exif-data.
La fila de repetición se especifica con una expresión XPath que selecciona todos los atributos del nodo del elemento Exif devuelto por la función image-exif-data:
$PERSISTENT/Root/ExifData/Exif/@*.
 

MTDExifTut03     MTDExifTut04
 

 

La primera columna de la tabla contiene la posición del índice del atributo actual: index-of(../@*/name(), ./name() )
La segunda columna contiene el nombre del atributo actual: name(.)
La tercera columna contiene el valor del atributo actual: current()
No todas las imágenes contienen los mismos metadatos Exif. En algunos casos, algunos metadatos pueden ausentarse mientras que en otros casos, los metadatos adicionales podrían estar presentes, en algunos otros casos, los metadatos podrían etiquetados con etiquetas no estándares específicas del vendedor. En resumen, es importante conocer los metadatos que se encuentran disponibles y bajo los nombres de los atributos en los que aparecen. Sólo cuando se conoce dicha información, se pueden recuperar valores de atributos específicos.
Si conocemos los nombres de los atributos que se devuelven, podemos acceder a su valor usando la función image-exif-data como ésta: image-exif-data(Base64String)/@WantedAttribute. Observe que la función devuelve el elemento Exif.

 

 

Click to expand/collapsePoblar la estructura en árbol $PERSISTENT con datos Exif

 

Puede ser útil consultar todos los pares valor-atributo devueltos por la función image-exif-data. Para mostrar los pares atributos-valor, podemos almacenar este resultado de forma adecuada en la estructura jerárquica en árbol $PERSISTENT.
En nuestro ejemplo del diseño, el nodo $PERSISTENT/Root/ExifData está poblado con los datos Exif. Esto se consigue aneando un nodo secundario al nodo ExifDato que contiene el resultado de la función image-exif-data.
Esto se consigue especificando una acción "Anexar nodo" en el cuadro combinado que selecciona la imagen que se va a visualizar (consulte la captura de pantalla siguiente). El evento OnFinishEditing del cuadro combinado desencadena la acción "Anexar nodo"
 
MTDExifTut02
 
La expresión de localizador de XPath en la acción "Anexar nodo" ubica el nodo en el archivo XML que tiene el mismo nombre que la cadena en $PERSISTENT/Root/ComboBoxValue.
El nodo $PERSISTENT/Root/ExifData se borra antes de que se anexen los datos Exif devueltos por la función image-exif-data al nodo ExifData.
Si conociéramos los nombres de los atributos que se devuelven, podemos acceder al valor de cualquier atributo usando la función image-exif-data como ésta: image-exif-data(Base64String)/@WantedAttribute. Observe que la función devuelve el elemento Exif.

 

 


© 2019 Altova GmbH