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.