2011-08-19 10 views
7

Szukałem na ten temat, ale jedyne odpowiednie wątki jakie mogę znaleźć są datowane na rok 2008 stąd moje nowe pytanie.Biblioteka EXIF ​​dla .NET 4.0 framework

Czekam na opracowanie programu przy użyciu języka C# .Net 4.0. Celem mojego programu będzie wyodrębnienie informacji EXIF ​​z jpegs (producent, model, informacje o geolokacji itp.), A następnie zapełnienie tego w DB serwera MySql/Sql.

Czy ktoś może polecić dobre biblioteki, które mogą być odpowiednie dla tego projektu? Szukałbym też numerów seryjnych kamer (wiem, że to zależy od producenta), ale jeśli ktokolwiek wie o istniejących bibliotekach, które to rozwiązują, byłoby to bardzo pomocne.

Dzięki i cieszyć się weekend

+0

szukasz darmowych bibliotek lub handlowych? – Yahia

+0

Szukam obu. Wszystko zależy od kosztów komercyjnych, ale jeśli możesz polecić, z przyjemnością przyjrzę się im. Jeśli są wolne, które wykonują dobrą robotę, to wolałbym je :) – thefragileomen

+0

Nie próbowałem żadnych darmowych ... ale spójrz na LeadTools lub GdPicutre ... esp. informacje dotyczące kamery będą koszmarne, ponieważ to się bardzo często zmienia, więc trzeba często aktualizować ... – Yahia

Odpowiedz

4

uzyskać podstawowe informacje EXIF ​​(producent, model aparatu, czas, przysłona, etc.), chciałbym spojrzeć na klasy System.Drawing.Image - w szczególności kolekcji PropertiesItems.

Ta klasa ma wady. Wymaga załadowania całego obrazu do pamięci przed odtworzeniem informacji EXIF ​​(tj. Jest nieco powolny). Nie obsługuje on również wszystkich pól specyficznych dla dostawcy, które nie są jednorodne między aparatem a aparatem.

Image.PropertyItems

MSDN: Reading Image Metadata

PropertyItem.Id

Używałem go z wielkim sukcesem do zbierania informacji o mojej kolekcji zdjęć (dziesiątki tysięcy zdjęć wykonanych z kilkunastu różnych aparatów cyfrowych różnych marek i modele).

+5

Też użyłem tego dla informacji EXIF ​​i znalazłem, że działa dobrze. Czy wiesz, że istnieje wbudowany sposób, aby pominąć ładowanie obrazu i po prostu uzyskać metadane? Ogromna poprawa prędkości! Musisz użyć 'Image.FromFile (Stream, false, false)' ... Zobacz więcej informacji tutaj: http://msdn.microsoft.com/en-us/library/21zw9ah6.aspx –

+1

Jeśli prędkość jest ważna, możesz również skompiluj exifLib dla .NET 4.0: http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor- for-NET-2-0. Jest szybszy niż Image.FromFile (strumień, fałsz, fałsz) podczas czytania pojedynczych tagów. Jeśli potrzebujesz przeczytać DUŻO tagów, wbudowane biblioteki framework mogą być szybsze. –

7

Projekt meta-ekstraktor był żywy i dobrze od 2002 roku dla Java i jest już dostępny dla .NET 3.5 i nowszych. Istnieje również wersja PCL.

  • Open source (Apache 2.0)
  • Mocno przetestowane i szeroko stosowane
  • Obsługuje wiele typów obrazów (JPEG, TIFF, PNG, WebP, GIF, BMP, ICO, PCX ...)
  • Obsługuje wiele typów metadanych (Exif, IPTC, XMP, JFIF, ...)
  • Obsługuje wiele pól specyficznych dla producenta (Canon, Nikon, ...)
  • Bardzo szybko (w pełni przetwarza ~ 400 obrazów łącznie 1.33GB w ~ 3 sekundy) przy niskim zużyciu pamięci

Jest dostępny pod numerem NuGet lub GitHub.

wykorzystanie próbki:

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

(Ujawnienie: I utrzymanie tej biblioteki)

+0

Nie to, o co prosił OP, ponieważ jest .NET 4.5+ tylko – mfeineis

+0

Jednak to * jest * miłą biblioteką i może mógłbyś dostarczyć nam kompilacji dla biednych dusz, które wciąż trzymają się .NET4.0? Byłoby świetnie! Próbowałem zmienić ramkę docelową w VS2015, ale wydaje mi się, że jesteś zależny od wielu rzeczy .NET4.5 ... – mfeineis

+1

@vanhelgen, dziękuję za informację zwrotną! Dodam obsługę wcześniejszych wersji .NET. Zobacz [ten nowy numer] (https://github.com/drewnoakes/metadata-extractor-dotnet/issues/22). –