2011-08-19 42 views
7

Tôi đã tìm kiếm về chủ đề này nhưng chỉ những chủ đề phù hợp mà tôi có thể tìm thấy là ngày 2008 do đó câu hỏi mới của tôi.Thư viện EXIF ​​cho .NET 4.0 framework

Tôi đang xem xét việc phát triển một chương trình bằng ngôn ngữ C# .Net 4.0. Mục đích của chương trình của tôi là trích xuất thông tin EXIF ​​từ jpegs (Nhà sản xuất, Mô hình, Thông tin vị trí địa lý, v.v ...) và sau đó điền dữ liệu này vào một máy chủ DB của MySql/Sql.

Ai có thể đề xuất bất kỳ thư viện nào phù hợp cho dự án này? Tôi cũng sẽ tìm số sê-ri máy ảnh (tôi biết điều này thay đổi từ nhà sản xuất đến nhà sản xuất) nhưng nếu ai biết về bất kỳ thư viện nào có địa chỉ này, nó sẽ hữu ích nhất.

Cảm ơn và tận hưởng những ngày cuối tuần

+0

Bạn đang tìm kiếm cho các thư viện miễn phí hay thương mại? – Yahia

+0

Tôi đang tìm kiếm cả hai. Tất cả phụ thuộc vào chi phí của những thương mại nhưng nếu bạn có thể đề nghị bất kỳ, tôi rất vui khi có một cái nhìn vào họ. Nếu có những người miễn phí mà chỉ làm một công việc tốt, sau đó tôi muốn họ :) – thefragileomen

+0

Tôi đã không thử bất kỳ những cái miễn phí ... nhưng hãy xem LeadTools hoặc GdPicutre ... esp. thông tin cụ thể của máy ảnh sẽ là một cơn ác mộng vì điều đó thay đổi rất thường xuyên, do đó bạn cần cập nhật thường xuyên ... – Yahia

Trả lời

4

Để biết thông tin cơ bản EXIF ​​(nhà sản xuất, mô hình máy ảnh, thời gian, khẩu độ, vv), tôi sẽ nhìn vào lớp System.Drawing.Image - đặc biệt là PropertiesItems bộ sưu tập.

Có những bất lợi đối với lớp học này. Nó yêu cầu tải toàn bộ hình ảnh vào bộ nhớ trước khi truy xuất thông tin EXIF ​​(tức là nó hơi chậm). Nó cũng không xử lý tất cả các trường của nhà cung cấp cụ thể mà không thống nhất từ ​​máy ảnh đến máy ảnh.

Image.PropertyItems

MSDN: Reading Image Metadata

PropertyItem.Id

Tôi đã sử dụng nó với thành công rực rỡ để thu thập thông tin về bộ sưu tập ảnh của tôi (hàng chục ngàn bức ảnh chụp với một chục máy ảnh kỹ thuật số khác nhau làm cho khác nhau và mô hình).

+5

Tôi cũng đã sử dụng điều này cho thông tin EXIF ​​và thấy nó hoạt động tốt. Bạn có biết rằng có một cách tích hợp để bỏ qua việc tải hình ảnh và chỉ nhận siêu dữ liệu? Cải thiện tốc độ lớn! Bạn phải sử dụng 'Image.FromFile (Stream, false, false)' ... Xem thêm thông tin tại đây: http://msdn.microsoft.com/en-us/library/21zw9ah6.aspx –

+1

Nếu tốc độ là quan trọng, bạn có thể cũng biên dịch exifLib cho .NET 4.0: http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0. Nó nhanh hơn Image.FromFile (luồng, sai, sai) khi đọc các thẻ đơn. Nếu bạn cần đọc rất nhiều thẻ, các thư viện khung dựng sẵn có thể nhanh hơn. –

7

Dự án siêu dữ liệu giải nén đã hoạt động và tốt kể từ năm 2002 cho Java và hiện khả dụng cho .NET 3.5 trở lên. Ngoài ra còn có một phiên bản PCL.

nguồn
  • mở (Apache 2.0)
  • nặng nề thử nghiệm và sử dụng rộng rãi
  • Hỗ trợ nhiều định dạng ảnh (JPEG, TIFF, PNG, WebP, GIF, BMP, ICO, PCX ...)
  • hỗ trợ nhiều loại siêu dữ liệu (Exif, IPTC, XMP, JFIF, ...)
  • hỗ trợ nhiều lĩnh vực sản xuất cụ thể (Canon, Nikon, ...)
  • Rất nhanh chóng (xử lý hoàn toàn ~ 400 hình ảnh tổng cộng 1.33GB trong ~ 3 giây) với mức tiêu thụ bộ nhớ thấp

Có sẵn qua NuGet hoặc GitHub.

sử dụng mẫu:

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

(Tiết lộ: Tôi duy trì thư viện này)

+0

Không phải những gì OP yêu cầu vì nó là .NET 4.5+ chỉ – mfeineis

+0

Tuy nhiên nó * là * một thư viện đẹp và có thể bạn có thể cung cấp một bản dựng cho chúng ta những linh hồn nghèo nàn vẫn bị mắc kẹt với .NET4.0? Điều đó thật tuyệt vời! Tôi đã cố gắng để thay đổi khung mục tiêu trong VS2015 bản thân mình nhưng có vẻ như bạn đang phụ thuộc vào rất nhiều thứ NET4.5 ... – mfeineis

+1

@ vanhelgen, cảm ơn thông tin phản hồi! Tôi cũng sẽ thêm hỗ trợ cho các phiên bản .NET cũ hơn. Xem [vấn đề mới này] (https://github.com/drewnoakes/metadata-extractor-dotnet/issues/22). –