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!

È stato utile?

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:

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.

Puoi usare TagLib# che viene utilizzato da applicazioni come Punto F.Oltre a Exif, leggerà una buona quantità di formati di metadati per immagini, audio e video.

mi piace anche ExifUtils API ma presenta bug e non è sviluppata attivamente.

La classe Immagine ha le proprietà PropertyItems e PropertyIdList.Puoi usarli.

Ottenere dati EXIF ​​da un'immagine JPEG implica:

  1. 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.
  2. Analizza tutti i dati da 0xFFE1 a 0xFFE2 .Questi dati sarebbero un flusso di byte, nel file codificato JPEG.
  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top