En la publicación anterior, discutimos cómo manejar los datos EXIF de las imágenes en Java. Aquí, hoy veremos cómo lograr lo mismo pero en C#. Si no visitó la última publicación, pero desea extraer, actualizar, agregar o eliminar datos EXIF de sus imágenes mediante programación en C#, este artículo lo guiará a través de esto. Cubriremos las siguientes formas de manipular con datos EXIF en C#:

Biblioteca C# de gestión de metadatos

Metadatos .NET API de GroupDocs

GroupDocs.Metadata for .NET es la API de .NET de gestión de metadatos. Tiene una larga lista de características para una amplia variedad de formatos de archivo compatibles. Tiene la capacidad no solo de extraer metadatos de las imágenes, sino que también puede agregar, editar, actualizar y eliminar metadatos de las imágenes y documentos con varias opciones.

En este artículo, usaremos esta API, así que asegúrese de descargar sus binarios o instalar la API desde NuGet.

Leer datos EXIF de imágenes en C#

Puede leer fácilmente las propiedades de los datos EXIF siguiendo los pasos mencionados. Comenzando con la extracción de datos EXIF de esta imagen, la Estatua de la Libertad de 93 m de altura. Aquí usaremos un archivo JPG como imagen de ejemplo; sin embargo, podemos usar cualquier archivo, ya sea PNG, WebP, BMP, GIF, TIFF o cualquier otro de los formatos de archivo admitidos mencionados al final de Este artículo.

Imagen Liberty JPG para datos EXIF
  • Cargue el archivo de origen de la imagen que contiene información de datos EXIF utilizando el constructor de clase Metadata.
  • Obtenga su paquete raíz llamando al método GetRootPackage().
  • Del paquete raíz, obtenga su ExifPackage de su ExifPackage property.
  • Una vez que tenga el paquete EXIF, ahora puede acceder a las propiedades EXIF de la imagen; como Marca, Modelo, Ancho, Longitud, Fecha y hora, Derechos de autor, Software, etc., como se muestra a continuación en el ejemplo de código C#.
// Extract EXIF Data Package Information from image in C#
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null && root.ExifPackage != null)
    {
        Console.WriteLine(root.ExifPackage.Make);
        Console.WriteLine(root.ExifPackage.Model);
        Console.WriteLine(root.ExifPackage.ImageWidth);
        Console.WriteLine(root.ExifPackage.ImageLength);
        Console.WriteLine(root.ExifPackage.DateTime);
     }
}

El código anterior mostrará la siguiente información EXIF disponible de la imagen JPG proporcionada.

Make : NIKON CORPORATION
Model : NIKON D7200 
Width : 640
Length : 384
DateTime : 2018:07:06 19:31:05

Lectura de información EXIF IFD y GPS de la imagen

Los datos EXIF también incluyen la información Exif IFD (Directorio de archivos de imagen) y GPS (Sistema de posicionamiento global). Ahora, para la información del paquete IFD y GPS, solo tiene que acceder a las propiedades respectivas del paquete EXIF, es decir, ExifIfdPackage o GpsPackage. De estos paquetes, puede extraer mucha más información que la mencionada a continuación:

  • Número de serie del dispositivo
  • Nombre del propietario de la cámara
  • Patrón CFA
  • Velocidad
  • Dirección de la imagen
  • Sello de la fecha
  • Información del Área
  • Altitud
  • Latitud
  • Longitud
  • etc.

El código mencionado a continuación se puede agregar en su método anterior para mostrar datos EXIF junto con información IFD y GPS.

// Display EXIF IFD Package Properties like Serial Number and Camera Owner.
Console.WriteLine(root.ExifPackage.ExifIfdPackage.BodySerialNumber);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.CameraOwnerName);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.UserComment);
// Display EXIF GPS Information like Latitude, Longitude, etc.
Console.WriteLine(root.ExifPackage.GpsPackage.Altitude);
Console.WriteLine(root.ExifPackage.GpsPackage.LatitudeRef);
Console.WriteLine(root.ExifPackage.GpsPackage.LongitudeRef);

Leer todas las etiquetas EXIF de imágenes en C#

Puede extraer todas las propiedades EXIF de cualquier imagen, puede hacerlo de una manera casi similar a la anterior:

  • Cargue la imagen con el constructor Metadatos.
  • Obtenga el paquete raíz llamando al método GetRootPackage().
  • Obtenga el paquete EXIF de la propiedad ExifPackage del paquete raíz.
  • Iterar el paquete EXIF y obtener los pares de nombre-valor deseados.
  • Del mismo modo, obtenga los paquetes IFD y GPS para mostrar sus claves y valores.
// Extract all EXIF Metadata from the image
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null && root.ExifPackage != null)
    {
        const string pattern = "{0} = {1}";
        // Read all EXIF Package Tags and values.
        foreach (TiffTag tag in root.ExifPackage.ToList()) {
            Console.WriteLine(pattern, tag.Name, tag.Value);
        }
        // Read all EXIF IFD Package Tags and values.
        foreach (TiffTag tag in root.ExifPackage.ExifIfdPackage.ToList()) {
            Console.WriteLine(pattern, tag.Name, tag.Value);
        }
         // Read all EXIF GPS Package Tags and values.
        foreach (TiffTag tag in root.ExifPackage.GpsPackage.ToList()) {
            Console.WriteLine(pattern, tag.Name, tag.Value);
        }
    }
}

Actualizar propiedades EXIF en C#

Puede cambiar los datos EXIF existentes de cualquier imagen fácilmente. Los siguientes son los pasos que puede seguir:

Actualizar paquete EXIF

  • Obtenga el paquete raíz llamando al método GetRootPackage().
  • Establezca las propiedades de ExifPackage asignando los nuevos valores a las propiedades correspondientes como asignar un nuevo valor a:
    • root.ExifPackage.Copyright: para establecer información de derechos de autor actualizada.
  • Del mismo modo, puede establecer los valores para el artista, marca, modelo, software, ancho y alto de la imagen, fecha y hora, etc.

Actualizar paquete EXIF IFD

Similar a las propiedades de configuración del paquete EXIF, podemos actualizar las propiedades de los paquetes EXIF IFD y GPS.

  • Asigne un valor a root.ExifPackage.ExifIfdPackage.CameraOwnerName para configurar el propietario de la cámara.

Puede visitar las clases ExifIfdPackage o ExifGpsPackage para tener una idea de cuánto puede personalizar sus imágenes.

// Update or change new values in EXIF Data (EXIF Package & EXIF IFD Package).
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null)
    {
        // Set the EXIF package if it is missing
        if (root.ExifPackage == null) {
            root.ExifPackage = new ExifPackage();
        }
       // Setting the desired values in EXIF Package and EXIF IFD Package.
        root.ExifPackage.Copyright = "Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.";
        root.ExifPackage.ImageDescription = "Statue of Liberty for EXIF Data";
        root.ExifPackage.Software = "GroupDocs.Metadata for .NET"; 
        root.ExifPackage.ExifIfdPackage.BodySerialNumber = "GD-2020";
        root.ExifPackage.ExifIfdPackage.CameraOwnerName = "GroupDocs";
        root.ExifPackage.ExifIfdPackage.UserComment = "Nice image captured in 2018";
        metadata.Save("statue-of-liberty-updated.jpg");
    }
}

Eliminar metadatos EXIF de imágenes en C#

Si desea eliminar el paquete EXIF de cualquier archivo, simplemente establezca su propiedad ExifPackage en null.

// Removing the EXIF data from an image.
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null)
    {
        root.ExifPackage = null;
        metadata.Save("statue-of-liberty-no-exif.jpg");
    }
}

Imágenes compatibles y otros formatos

Estos son los formatos de archivo admitidos actualmente por GroupDocs.Metadata para información de datos EXIF de imágenes, audios y videos. Siempre puede visitar la documentación para obtener información actualizada.

Tipo de documento Formatos de archivo
Imágenes BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF
Audio y vídeo MP3, WAV, AVI, MOV/QT, FLV, ASF, DICOM

Ver más sobre GroupDocs.Metadata

Hablemos más @ Foro de soporte gratuito.

Artículo relacionado