2011-08-19 18 views
7

Ho cercato su questo argomento ma gli unici thread adatti che posso trovare sono datati 2008 quindi la mia nuova domanda.Libreria EXIF ​​per .NET 4.0 framework

Sto cercando di sviluppare un programma utilizzando il linguaggio C# .Net 4.0. Lo scopo del mio programma sarà quello di estrarre informazioni EXIF ​​da jpegs (Produttore, Modello, Informazioni di geolocalizzazione ecc ...) e quindi inserire questo in un DB di server MySql/Sql.

Qualcuno può consigliare qualsiasi buona libreria che possa essere adatta per questo progetto? Cercherò anche i numeri seriali delle fotocamere (so che questo varia da produttore a produttore) ma se qualcuno sa di eventuali librerie esistenti che affrontano questo problema, sarebbe molto utile.

Grazie e godere il fine settimana

+0

stai cercando librerie libere o commerciale? – Yahia

+0

Sto cercando entrambi. Tutto dipende dai costi di quelli commerciali, ma se puoi consigliarli, sono felice di dargli un'occhiata. Se ci sono quelli gratuiti che fanno solo un buon lavoro, li preferirei :) – thefragileomen

+0

Non ho provato nessuno libero ... ma date un'occhiata a LeadTools o GdPicutre ... esp. le informazioni specifiche della telecamera saranno un incubo visto che cambiano molto spesso quindi è necessario aggiornare spesso ... – Yahia

risposta

4

Per informazioni di base EXIF ​​(produttore, modello di fotocamera, tempo, diaframma, ecc), vorrei guardare la classe System.Drawing.Image - in particolare la collezione PropertiesItems.

Ci sono degli svantaggi in questa classe. Richiede il caricamento dell'intera immagine in memoria prima di recuperare le informazioni EXIF ​​(ad esempio, è un po 'lento). Inoltre, non gestisce tutti i campi specifici del fornitore che non sono uniformi dalla fotocamera alla fotocamera.

Image.PropertyItems

MSDN: Reading Image Metadata

PropertyItem.Id

ho usato con grande successo per raccogliere informazioni circa la mia collezione di foto (decine di migliaia di foto scattate con una dozzina di diverse macchine fotografiche digitali di varie marche e Modelli).

+5

Anche io ho usato questo per info EXIF ​​e ho trovato che funziona bene. Sapevi che esiste un modo integrato per saltare il caricamento dell'immagine e ottenere solo i metadati? Massiccio miglioramento della velocità! Devi usare 'Image.FromFile (Stream, false, false)' ... Vedi maggiori informazioni qui: http://msdn.microsoft.com/en-us/library/21zw9ah6.aspx –

+1

Se la velocità è importante, potresti compilare anche exifLib per .NET 4.0: http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0. È più veloce di Image.FromFile (stream, false, false) durante la lettura di singoli tag. Se hai bisogno di leggere un sacco di tag, le librerie framework incorporate potrebbero essere più veloci. –

7

Il progetto metadata-extractor è vivo e vegeto dal 2002 per Java ed è ora disponibile per .NET 3.5 e versioni successive. C'è anche una versione PCL.

  • Open source (Apache 2.0)
  • ampiamente testato e ampiamente utilizzati
  • supporta molti tipi di immagine (JPEG, TIFF, PNG, WebP, GIF, BMP, ICO, PCX ...)
  • Supporta molti tipi di metadati (EXIF, IPTC, XMP, JFIF, ...)
  • supporta molti campi specifici del costruttore (Canon, Nikon, ...)
  • Molto veloce (processi completamente ~ 400 immagini per un totale di 1.33GB in ~ 3 secondi) con basso consumo di memoria

È disponibile tramite NuGet o GitHub.

utilizzo Esempio:

IEnumerable<Directory> directories = ImageMetadataReader.ReadMetadata(path); 

foreach (var directory in directories) 
foreach (var tag in directory.Tags) 
    Console.WriteLine($"{directory.Name} - {tag.TagName} = {tag.Description}"); 

(Disclosure: Io sostengo questa libreria)

+0

Non è quello che l'OP chiedeva dal momento che è .NET 4.5+ solo – mfeineis

+0

Tuttavia * è * una bella libreria e forse potresti fornire una build per noi povere anime ancora bloccate con .NET4.0? Sarebbe fantastico! Ho provato a cambiare il framework di destinazione in VS2015 ma sembra che tu stia dipendendo da molte cose di .NET4.5 ... – mfeineis

+1

@vanhelgen, grazie per il feedback! Aggiungerò anche il supporto per le versioni precedenti di .NET. Vedi [questo nuovo numero] (https://github.com/drewnoakes/metadata-extractor-dotnet/issues/22). –

Problemi correlati