2011-08-19 98 views
7

我已經在這個主題上搜索過,但唯一合適的線程我可以找到2008年,因此我的新問題。用於.NET 4.0框架的EXIF庫

我正在研究使用C#.Net 4.0語言開發一個程序。我的程序的目標是從jpegs(製造商,型號,地理位置信息等)中提取EXIF信息,然後將其填充到MySql/Sql服務器數據庫中。

任何人都可以推薦任何可能適合此項目的優秀庫嗎?我也會在尋找相機序列號(我知道這取決於製造商和製造商),但是如果有人知道任何現有的庫可以解決這個問題,那麼它會非常有幫助。

感謝,並享受週末

+0

你在尋找免費的圖書館或商業? – Yahia

+0

我正在尋找兩者。這一切都取決於商業成本,但如果你可以推薦任何,我很高興看看他們。如果有免費的那些只做一個好工作,那我寧願他們:) – thefragileomen

+0

我沒有嘗試任何免費的...但看看LEADTOOLS或GdPicutre ... ESP。相機的具體信息將是一個噩夢,因爲改變非常頻繁,所以你需要經常更新... – Yahia

回答

4

對於基本EXIF信息(製造商,相機型號,時間,光圈等),我會看看爲System.Drawing.Image類 - 尤其是PropertiesItems集合。

這個班有缺點。它需要在檢索EXIF信息之前將整個圖像加載到內存中(即,它有點慢)。它也不處理從相機到相機不統一的所有供應商特定字段。

Image.PropertyItems

MSDN: Reading Image Metadata

PropertyItem.Id

我已經取得了巨大成功用它來收集關於我的照片集(成千上萬的照片與各種品牌的幾十種不同的數碼相機拍攝的資料和楷模)。

+5

我也用這個EXIF信息,發現它運作良好。你知道有一種內置的方式可以跳過加載圖像並獲取元數據嗎?大規模的速度提高!您必須使用'Image.FromFile(流,假的,假的)'...點擊這裏查看更多信息:http://msdn.microsoft.com/en-us/library/21zw9ah6.aspx –

+1

如果速度是重要的,你可以還編譯用於.NET 4.0的exifLib:http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0。讀取單個標籤時,它比Image.FromFile(stream,false,false)更快。如果您需要閱讀很多標籤,內置的框架庫可能會更快。 –

7

元數據提取器項目自2002年以來一直活躍於Java,現在可用於.NET 3.5及更高版本。還有一個PCL版本。

  • 開源(Apache 2.0中)
  • 大量測試和廣泛用於
  • 支持許多圖像類型(JPEG,TIFF,PNG,WebP的,GIF,BMP,ICO,PCX ...)
  • 支持多種類型的元數據(EXIF,IPTC,XMP,JFIF,...)
  • 支持許多製造商特定領域(佳能,尼康,...)
  • 非常快(完全處理〜400個圖像共計1.33GB在〜3秒)內存消耗低

它可通過NuGetGitHub

使用範例:

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

(披露:我保持這個庫)

+0

不是什麼OP要求,因爲它是.NET 4.5+只有 – mfeineis

+0

然而,* *是一個很好的圖書館,也許你可以爲我們提供一個構建可憐的靈魂還是堅持了.NET4.0?那簡直太好了!我試圖改變VS2015中的目標框架,但似乎你依賴於很多.NET4.5的東西... – mfeineis

+1

@vanhelgen,感謝您的反饋!我也會添加對早期版本.NET的支持。看到[這個新問題](https://github.com/drewnoakes/metadata-extractor-dotnet/issues/22)。 –