2.9k 0

Xojo en MacOS: obtener y mostrar datos de imágenes

Los metadatos (e información EXIF) de las imágenes nos permiten acceder a datos relevantes y de utilidad asociados con una imagen propiamente dicha. A continuación verás lo fácil que resulta crear una aplicación Xojo en macOS que nos permita obtener y mostrar este tipo de datos.

Por ejemplo, los metadatos contienen entre otra información la fecha en la que fue realizada una fotografía (o creada una imagen), así como los valores de exposición, obturador, modelo de la cámara, el uso de flash o no, valor ISO, y también los datos de geolocalización que suelen incluir las fotografías capturadas con cualquiera de los iPhone entre otros dispositivos.

Para acceder a dicha información haremos uso de los Declare en Xojo, lo cual nos permite acceder a las clases y funciones relacionadas de los frameworks nativos en el sistema operativo (en este caso macOS).

En este caso, las funciones realmente interesantes se encuentran recogidas bajo el framework ImageIO (https://developer.apple.com/documentation/imageio?language=objc).

Crea un nuevo proyecto Desktop en el IDE de Xojo y añade un nuevo Módulo (por ejemplo, con el nombre External).

A continuación, añade un nuevo método al módulo utilizando los siguientes datos en el Panel Inspector asociado:

Method Name: MetadataForImageFile
Parameters: source as FolderItem
Return Type: String
Scope: Global

Añade ahora el siguiente fragmento de código en el Editor de Código asociado con el método recién añadido:

// Declares contra el framework "Foundation"
Declare Function NSClassFromString Lib "Foundation" (clsName As CFStringRef) As ptr
Declare Function FileURLWithPath Lib "Foundation" Selector "fileURLWithPath:" (obj As ptr, path As CFStringRef ) As ptr
Declare Function Description Lib "Foundation" Selector "description" (dict As ptr) As CFStringRef

// Declares contra el framework "ImageIO"
Declare Function CGImageSourceCreateWithURL Lib "ImageIO" (path As ptr, options As ptr) As ptr
Declare Function CGImageSourceCopyPropertiesAtIndex Lib "ImageIO" (imageSource As ptr, index As Integer, options As ptr) As ptr

Var desc As String

If source <> Nil Then

// Obtenemos una Referencia a la clase NSURL
Var nsurl As ptr = NSClassFromString("NSURL")

// Obtenemos una referencia a un objeto NSURL creado a partir
// de la ruta nativa de la imagen del FolderItem
Var filePath As ptr = FileURLWithPath(nsurl, source.nativePath)

// Obtenemos una referencia al objeto de imagen creado a partir del
// objeto de imagen creado desde el objeto NSURL
Var imageRef As ptr = CGImageSourceCreateWithURL(filePath,Nil)

// Obtenemos un NSDictionary que contiene los Metadatos para la imagen
Var dict As ptr = CGImageSourceCopyPropertiesAtIndex(imageRef,0,Nil)

// Obtenemos los contenidos del objeto NSDictionary como String
// Dicha cadena contendrá los metadatos para el archivo de imagen.
desc = Description(dict)

End If

Return desc

¡Y eso es todo! Ahora simplemente tienes que llamar a este método desde tu código para obtener una String que contenga la información de metadatos para el FolderItem recibido como parámetro.

Como de costumbre, confío en que encuentres este pequeño tutorial de interés.

— 
Javier Rodríguez (Xojo Engineer)
Twitter: @xojoes

Facebook

Descarga la última versión de Xojo

Recursos Xojo en Español

Alf

Propietario de www.faq-mac.com.

Deja una respuesta