Truco: Obtener metadatos de imágenes en macOS

Obtener la información de metadatos (incluyendo EXIF, si existe) en un archivo de imagen en macOS es algo realmente sencillo mediante el uso de Declares. Sigue leyendo y te mostraré cómo.

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.

En este enlace puedes encontrar más información sobre el Framework ImageIO de Apple.

Y en este enlace puedes descargar el proyecto de ejemplo Xojo donde se hace uso de este método.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *