No post anterior, discutimos como lidar com dados EXIF de imagens em Java. Aqui, hoje vamos procurar alcançar o mesmo, mas em C#. Se você não visitou a última postagem, mas deseja extrair, atualizar, adicionar ou remover dados EXIF de suas imagens programaticamente em C#, este artigo o guiará por isso. Abordaremos as seguintes maneiras de manipular dados EXIF em C#:

Biblioteca C# de gerenciamento de metadados

API de metadados .NET por GroupDocs

GroupDocs.Metadata for .NET é a API .NET de gerenciamento de metadados. Possui uma longa lista de recursos para uma ampla variedade de formatos de arquivo suportados. Ele tem a capacidade de não apenas extrair metadados de imagens, mas também adicionar, editar, atualizar e remover metadados de imagens e documentos com várias opções.

Neste artigo, usaremos esta API, portanto, certifique-se de baixar seus binários ou instalar a API de NuGet.

Leia dados EXIF de imagens em C

Você pode ler facilmente as propriedades de dados EXIF seguindo as etapas mencionadas. Começando com a extração dos dados EXIF desta imagem, Estátua da Liberdade de 93m de altura. Aqui usaremos um arquivo JPG como imagem de exemplo, no entanto, podemos usar qualquer arquivo, seja PNG, WebP, BMP, GIF, TIFF ou qualquer outro dos formatos de arquivo suportados mencionados no final do Este artigo.

Imagem Liberty JPG para dados EXIF
  • Carregue o arquivo de origem da imagem contendo informações de dados EXIF usando o construtor da classe Metadata.
  • Obtenha seu pacote raiz chamando o método GetRootPackage().
  • Do pacote raiz, obtenha seu ExifPackage de sua Propriedade ExifPackage.
  • Uma vez que você tenha o pacote EXIF, agora você pode acessar as propriedades EXIF da imagem; como Make, Model, Width, Length, DateTime, Copyright, Software, etc., conforme mostrado abaixo no exemplo 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);
     }
}

O código acima exibirá as seguintes informações EXIF disponíveis da imagem JPG fornecida.

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

Leitura de informações EXIF IFD e GPS da imagem

Os dados EXIF também incluem as informações Exif IFD (Diretório de arquivos de imagem) e GPS (Sistema de Posicionamento Global). Agora para informações de pacotes IFD e GPS, basta acessar as respectivas propriedades do EXIF package, ou seja, ExifIfdPackage ou GpsPackage. A partir desses pacotes, você pode extrair muito mais informações do que as mencionadas abaixo:

  • Número de série do dispositivo
  • Nome do proprietário da câmera
  • Padrão CFA
  • Velocidade
  • Direção da Imagem
  • Carimbo de data
  • Informações da área
  • Altitude
  • Latitude
  • Longitude
  • etc

O código abaixo mencionado pode ser adicionado em seu método acima para exibir dados EXIF junto com informações IFD e 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);

Leia todas as tags EXIF de imagens em C

Você pode extrair todas as propriedades EXIF de qualquer imagem, pode fazê-lo de maneira quase semelhante à acima:

  • Carregue a imagem com o construtor Metadados.
  • Obtenha o pacote raiz chamando o método GetRootPackage().
  • Obtenha o pacote EXIF da propriedade ExifPackage do pacote raiz.
  • Itere o pacote EXIF e obtenha os pares nome-valor desejados.
  • Da mesma forma, obtenha os pacotes IFD e GPS para exibir suas chaves e 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);
        }
    }
}

Atualizar propriedades EXIF em C#

Você pode alterar os dados EXIF existentes de qualquer imagem facilmente. A seguir estão os passos que você pode seguir:

Atualizar pacote EXIF

  • Obtenha o pacote raiz chamando o método GetRootPackage().
  • Defina as propriedades ExifPackage atribuindo os novos valores às propriedades correspondentes, como atribuir novo valor a:
    • root.ExifPackage.Copyright - para definir informações atualizadas de direitos autorais.
  • Da mesma forma, você pode definir os valores para o artista, marca, modelo, software, largura e altura da imagem, DateTime, etc.

Atualizar pacote EXIF IFD

Semelhante às propriedades de configuração do pacote EXIF, podemos atualizar as propriedades dos pacotes EXIF IFD e GPS.

  • Atribua valor a root.ExifPackage.ExifIfdPackage.CameraOwnerName para definir o proprietário da câmera.

Você pode visitar as classes ExifIfdPackage ou ExifGpsPackage para ter uma ideia de quanto você pode personalizar para suas imagens.

// 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");
    }
}

Remover metadados EXIF de imagens em C#

Se você deseja remover o pacote EXIF de qualquer arquivo, basta definir sua propriedade ExifPackage como 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");
    }
}

Imagens compatíveis e outros formatos

Esses são os formatos de arquivo atualmente suportados pelo GroupDocs.Metadata para informações de dados EXIF de imagens, áudios e vídeos. Você sempre pode visitar a documentação para obter informações atualizadas.

Tipo de documento Formatos de arquivo
Imagens BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF
Áudio e Vídeo MP3, WAV, AVI, MOV/QT, FLV, ASF, DICOM

Veja mais sobre GroupDocs.Metadata

Vamos conversar mais @ Fórum de suporte gratuito.

Artigo relacionado