Leer EXIF de archivos de imagen Visual Basic [SOLUCIONADO]

### Trabajando con Metadatos EXIF en Visual Basic

Los datos EXIF son un conjunto de información que se guarda junto con la fotografía y pueden ser de gran utilidad para múltiples propósitos, desde la organización de imágenes hasta la verificación de su autenticidad. Visual Basic ofrece herramientas que nos permiten **acceder y leer esta información** de una manera sencilla y efectiva.

#### ¿Qué son los Datos EXIF?
EXIF, siglas de Exchangeable Image File Format, son metadatos que se guardan en las imágenes al tomar una fotografía con dispositivos digitales. Estos metadatos pueden incluir datos como la fecha y hora de la foto, la marca y modelo de la cámara, la configuración de la captura, coordenadas GPS, entre otros. Estos datos son valiosos para programadores y fotógrafos pues ofrecen un contexto amplio sobre cómo se tomó una imagen determinada.

#### Herramientas de Visual Basic para Leer Metadatos
Visual Basic proporciona las clases necesarias para manipular archivos de imagen y extraer metadatos EXIF. Para el propósito de este artículo, se utilizará la clase `Bitmap`, que forma parte de la biblioteca `System.Drawing`.

#### Implementación de Lectura de Metadatos EXIF

Para extraer esta información, primero se debe cargar la imagen en un objeto `Bitmap`. Posteriormente, podremos recorrer las propiedades de la imagen para extraer la información deseada. Es importante manejar correctamente las excepciones para asegurar que el código se ejecute sin errores en caso de que un archivo de imagen no contenga los metadatos EXIF.

A continuación, ofrecemos un ejemplo de cómo obtener la información EXIF de una fotografía utilizando Visual Basic:

Imports System.Drawing
Imports System.Drawing.Imaging

Public Class ExifReader

    Public Shared Sub LeerMetadatos(ByVal rutaDeImagen As String)
        Try
            Using imagen As Bitmap = New Bitmap(rutaDeImagen)
                ' Iterar sobre las propiedades de la imagen
                For Each prop As PropertyItem In imagen.PropertyItems
                    ' Mostrar información EXIF relevante
                    Console.WriteLine($"Propiedad: {prop.Id.ToString("x")}, Valor: {BitConverter.ToString(prop.Value)}")
                Next
            End Using
        Catch ex As Exception
            Console.WriteLine("Error al leer la imagen: " & ex.Message)
        End Try
    End Sub

End Class

Para usar este código, solo se necesita indicar la ruta del archivo que queremos procesar como parámetro en el método `LeerMetadatos`. Este método itera a través de la colección `PropertyItems`, que contiene todos los ítems de metadatos EXIF de la imagen, mostrando en consola el identificador de la propiedad y su valor en formato hexadecimal.

Es importante notar que identificador de la propiedad (ID) es un número que representa un particular tipo de metadato EXIF y la conversión a hexadecimal (`prop.Id.ToString(“x”)`) se realiza para facilitar su lectura e identificación, ya que es el formato más común de representación para estos identificadores.

#### Entendiendo los Códigos de Propiedades EXIF
Los códigos hexadecimales de las propiedades EXIF siguen un estándar que permite identificar qué tipo de metadato representan. Por ejemplo, el código `0x0132` indica la fecha y hora de cuando se tomó la foto. Sin embargo, los valores de las propiedades se presentan en un formato binario y muchas veces necesitan ser interpretados para poder ser entendidos como información legible.

#### Convertir Bytes EXIF a Información Legible
Para hacer más útil la función anterior y poder convertir los valores de bytes a algo legible, se puede mejorar la función para interpretar y presentar la información de manera más amigable:

Imports System.Text

Public Class ExifReader

    Private Shared Function ConvertirValorEXIF(prop As PropertyItem) As String
        Select Case prop.Id
            Case &H9003, &H9004 ' Fecha y hora en la que la foto fue tomada o modificada
                Return Encoding.ASCII.GetString(prop.Value).TrimEnd(Chr(0))
            Case &HA002 ' Ancho de la imagen
                Return BitConverter.ToUInt32(prop.Value, 0).ToString()
            Case &HA003 ' Alto de la imagen
                Return BitConverter.ToUInt32(prop.Value, 0).ToString()
            ' Otros casos específicos según sea requerido
            Case Else
                Return BitConverter.ToString(prop.Value)
        End Select
    End Function

    Public Shared Sub LeerMetadatos(ByVal rutaDeImagen As String)
        ' El código continua...
    End Sub

End Class

En este bloque de código se muestra la función `ConvertirValorEXIF`, que es capaz de reconocer los identificadores EXIF más comunes y realizar una conversión adecuada de los valores que contienen. Por ejemplo, para las fechas y las dimensiones de la imagen, el método reconoce el ID de la propiedad y realiza una conversión de los bytes a texto o a un número respectivamente.

#### Extracción de Información EXIF Específica
Aunque se puede obtener un gran conjunto de información EXIF, muchas veces se requerirá solo ciertos tipos de datos. Enfocándonos en la extracción de información específica, como la fecha y hora, marca de la cámara, modelo y orientación, ajustamos nuestro código de la siguiente manera para mostrar solamente esa información:

Public Shared Sub LeerMetadatos(ByVal rutaDeImagen As String)
    Try
        Using imagen As Bitmap = New Bitmap(rutaDeImagen)
            ' Códigos de las propiedades EXIF a buscar
            Dim propiedadesDeseadas As Integer() = {
                &H9003, ' Fecha y hora
                &H010F, ' Marca de la cámara
                &H0110, ' Modelo de la cámara
                &H0112  ' Orientación
            }

            For Each idPropiedad In propiedadesDeseadas
                Dim prop As PropertyItem = imagen.GetPropertyItem(idPropiedad)
                Console.WriteLine($"Propiedad: {idPropiedad.ToString("x")}, Valor: {ConvertirValorEXIF(prop)}")
            Next
        End Using
    Catch ex As Exception
        Console.WriteLine("Error al leer la imagen: " & ex.Message)
    End Try
End Sub

<

Este extracto del método `LeerMetadatos()` muestra cómo obtener solamente ciertas propiedades EXIF predeterminadas.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad