Come ottenere i dati EXIF da un file utilizzando C# [chiuso]
-
09-06-2019 - |
Domanda
Vorrei scrivere un piccolo programma in C# che esamini le mie foto jpeg e, ad esempio, le ordini in cartelle datate (usando le MIE convenzioni sugli appuntamenti, dannazione...).
Qualcuno conosce un modo relativamente semplice per ottenere i dati EXIF come data e ora o esposizione in modo programmatico?Grazie!
Soluzione
Controlla questo estrattore di metadati. È scritto in Java ma è stato portato anche in C#. Ho utilizzato la versione Java per scrivere una piccola utility per rinominare i miei file jpeg in base alla data e ai tag del modello.Molto facile da usare.
MODIFICARE estrattore di metadati supporta anche .NET.È una libreria molto veloce e semplice per accedere ai metadati di immagini e video.
Supporta completamente Exif, nonché IPTC, XMP e molti altri tipi di metadati da tipi di file tra cui JPEG, PNG, GIF, PNG, ICO, WebP, PSD, ...
var directories = ImageMetadataReader.ReadMetadata(imagePath);
// print out all metadata
foreach (var directory in directories)
foreach (var tag in directory.Tags)
Console.WriteLine($"{directory.Name} - {tag.Name} = {tag.Description}");
// access the date time
var subIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime);
È disponibile tramite NuGet e il il codice è su GitHub.
Altri suggerimenti
Come suggerito, puoi utilizzare alcune librerie di terze parti o farlo manualmente (il che non è molto lavoro), ma il modo più semplice e flessibile è forse utilizzare la funzionalità integrata in .NET.Per ulteriori informazioni vedere:
System.Drawing.Image.PropertyItems Proprietà
Dico "è il più flessibile" perché .NET non tenta di interpretare o unire i dati in alcun modo.Per ogni EXIF ottieni sostanzialmente un array di byte.Questo può essere positivo o negativo a seconda di quanto controllo desideri effettivamente.
Inoltre, devo sottolineare che l'elenco delle proprietà in realtà non corrisponde direttamente ai valori EXIF.L'EXIF stesso è archiviato in più tabelle con ID sovrapposti, ma .NET inserisce tutto in un unico elenco e ridefinisce gli ID di alcuni elementi.Ma finché non ti interessano gli ID EXIF precisi, dovresti andare bene con la mappatura .NET.
Ecco un collegamento ad un altro domanda SO simile, che ha una risposta che punta a questo buon articolo su "Lettura, scrittura e metadati delle foto" in .Net.
La classe Immagine ha le proprietà PropertyItems e PropertyIdList.Puoi usarli.
Ottenere dati EXIF da un'immagine JPEG implica:
- Cercando i marcatori JPEG che menzionano l'inizio dei dati EXIF.per esempio.normalmente oxFFE1 è il marcatore inserito durante la codifica dei dati EXIF, che è un segmento APPlication, dove vanno i dati EXIF.
- Analizza tutti i dati da 0xFFE1 a 0xFFE2 .Questi dati sarebbero un flusso di byte, nel file codificato JPEG.
- L'equivalente ASCII di questi byte conterrebbe varie informazioni relative alla data dell'immagine, al nome del modello della fotocamera, all'esposizione ecc...
Lo strumento da riga di comando ExifTool di Phil Harvey funziona con dozzine di formati di immagini, inclusi numerosi formati RAW proprietari, e può manipolare una varietà di formati di metadati tra cui EXIF, GPS, IPTC, XMP, JFIF.
Applicazione molto facile da usare, leggera e di grande effetto.