Nel post precedente, abbiamo discusso di come gestire i dati EXIF delle immagini in Java. Qui, oggi cercheremo di ottenere lo stesso risultato ma in C#. Se non hai visitato l’ultimo post, ma desideri estrarre, aggiornare, aggiungere o rimuovere i dati EXIF delle tue immagini a livello di codice in C#, questo articolo ti guiderà attraverso questo. Tratteremo i seguenti modi per manipolare i dati EXIF in C#:

Libreria C# di gestione dei metadati

API di metadati .NET di GroupDocs

GroupDocs.Metadata for .NET è l’API .NET per la gestione dei metadati. Ha un lungo elenco di caratteristiche per un’ampia varietà di formati di file supportati. Ha la capacità non solo di estrarre metadati dalle immagini, ma può anche aggiungere, modificare, aggiornare e rimuovere metadati dalle immagini e dai documenti con varie opzioni.

In questo articolo utilizzeremo questa API, quindi assicurati di scaricare i suoi binari o installare l’API da NuGet.

Leggi i dati EXIF dalle immagini in C#

Puoi leggere facilmente le proprietà dei dati EXIF seguendo i passaggi indicati. A partire dall’estrazione dei dati EXIF da questa immagine, Statua della Libertà alta 93 m. Qui utilizzeremo un file JPG come immagine di esempio, tuttavia, possiamo utilizzare qualsiasi file sia esso PNG, WebP, BMP, GIF, TIFF o qualsiasi altro dai formati di file supportati menzionati alla fine di Questo articolo.

Immagine Liberty JPG per dati EXIF
  • Carica il file di origine dell’immagine contenente le informazioni sui dati EXIF utilizzando il costruttore di classe Metadata.
  • Ottieni il suo pacchetto radice chiamando il metodo GetRootPackage().
  • Dal pacchetto radice, prendi il suo ExifPackage dalla sua Proprietà ExifPackage.
  • Una volta ottenuto il pacchetto EXIF, ora puoi accedere alle proprietà EXIF dell’immagine; come Make, Model, Width, Length, DateTime, Copyright, Software e così via, come mostrato di seguito nell’esempio di codice 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);
     }
}

Il codice sopra visualizzerà le seguenti informazioni EXIF disponibili dell’immagine JPG fornita.

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

Lettura delle informazioni EXIF IFD e GPS dell’immagine

I dati EXIF includono anche le informazioni Exif IFD (Image File Directory) e GPS (Global Positioning System). Ora per le informazioni sui pacchetti IFD e GPS, devi solo accedere alle rispettive proprietà del pacchetto EXIF, ad esempio ExifIfdPackage o GpsPackage. Da questi pacchetti, puoi estrarre molte più informazioni di quelle indicate di seguito:

  • Numero di serie del dispositivo
  • Nome del proprietario della fotocamera
  • Modello CFA
  • Velocità
  • Direzione dell’immagine
  • Il timbro della data
  • Informazioni sulla zona
  • Altitudine
  • Latitudine
  • Longitudine
  • eccetera.

Il codice sotto indicato può essere aggiunto nel metodo precedente per visualizzare i dati EXIF insieme alle informazioni 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);

Leggi tutti i tag EXIF delle immagini in C#

Puoi estrarre tutte le proprietà EXIF di qualsiasi immagine, puoi farlo in un modo quasi simile a quello sopra:

  • Carica l’immagine con il costruttore Metadata.
  • Ottieni il pacchetto radice chiamando il metodo GetRootPackage().
  • Ottieni il pacchetto EXIF dalla proprietà ExifPackage del pacchetto radice.
  • Iterare il pacchetto EXIF e ottenere le coppie nome-valore desiderate.
  • Allo stesso modo, fai in modo che i pacchetti IFD e GPS visualizzino le sue chiavi e valori.
// 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);
        }
    }
}

Aggiorna le proprietà EXIF in C#

Puoi modificare facilmente i dati EXIF esistenti di qualsiasi immagine. Di seguito sono riportati i passaggi che potresti seguire:

Aggiorna pacchetto EXIF

  • Ottieni il pacchetto radice chiamando il metodo GetRootPackage().
  • Imposta le proprietà ExifPackage assegnando i nuovi valori alle proprietà corrispondenti come assegnare un nuovo valore a:
    • root.ExifPackage.Copyright - per impostare informazioni aggiornate sui diritti d’autore.
  • Allo stesso modo, puoi impostare i valori per artista, marca, modello, software, larghezza e altezza dell’immagine, DateTime, ecc.

Aggiorna pacchetto EXIF IFD

Analogamente alle proprietà di impostazione del pacchetto EXIF, possiamo aggiornare le proprietà dei pacchetti EXIF IFD e GPS.

  • Assegna un valore a root.ExifPackage.ExifdPackage.CameraOwnerName per impostare il proprietario della telecamera.

Puoi visitare le classi ExifIfdPackage o ExifGpsPackage per avere un’idea di quanto puoi personalizzare per le tue immagini.

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

Rimuovere i metadati EXIF dalle immagini in C#

Se vuoi rimuovere il pacchetto EXIF da qualsiasi file, imposta la sua proprietà ExifPackage su 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");
    }
}

Immagini supportate e altri formati

Questi sono i formati di file attualmente supportati da GroupDocs.Metadata per le informazioni sui dati EXIF di immagini, audio e video. Puoi sempre visitare la documentazione per le informazioni aggiornate.

Tipo di documento Formati di file
Immagini BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF
Audio e video MP3, WAV, AVI, MOV/QT, FLV, ASF, DICOM

Vedi di più su GroupDocs.Metadata

Parliamo di più @ Forum di supporto gratuito.

Articolo correlato