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.
El archivo de diseño Base64Images.mtd se localiza en la carpeta ((Mis) Documentosde 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.
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).
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.
ISi el usuario selecciona el elemento exif del cuadro combinado, entonces se mostrará la imagen codificada en Base64en 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.
•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.
•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$kinsuggested-image-file-extension($XML1/images/element()[local-name() eq$PERSISTENT/Root/ComboBoxValue]) returnif ($k != '') then$kelse"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$kin$PERSISTENT/Root/ExifData/Exif returnif ($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.
•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 eventoOnFinishEditing del cuadro combinado desencadena la opción.
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.
•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/@*.
•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.
•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 combinadodesencadena la acción "Anexar nodo"
•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.