最近在玩讀取圖片的Exif資訊,試了一下.NET內建的方法與別人包好的類別,但都不怎麼好用,最後找到CodeProject的ExifLibrary for .NET這篇,試起來功能算是滿齊全的,用起來也很容易,這邊稍稍記錄一下。
要使用ExifLibrary for .NET來做擷取圖片Exif的動作,首先我們必須下載組件並將之加入參考。
接著再將ExifLibrary命名空間加入,就可以開始進行程式部分的撰寫了。
using ExifLibrary;
程式撰寫時我們必須先取得ExifFile的物件實體,只要用ExifFile.Read將圖檔的位置帶入就可以了。
… ExifFile exifFile = ExifFile.Read(photoFile); …
有了ExifFile物件實體後,後續的動作就簡單多了,因為都是針對這個物件下去操作,像是要取得藏在圖檔Exif內的縮圖就可以透過ExifFile.Thumbnail.ToBitmap()。
… var thumbnail = exifFile.Thumbnail.ToBitmap(); …
而要取得圖檔的Exif資訊的話,可以直接透過ExifFile.Properties,並用ExifTag指定要取得的Exif資訊。
… var xResolution = exifFile.Properties[ExifTag.XResolution].Value; var yResolution = exifFile.Properties[ExifTag.YResolution].Value; …
也可以透過ExifFile.Properties.Values將圖檔所有的Exif資訊都逐一掃出。
… foreach (ExifProperty item in exifFile.Properties.Values) { tbxMessage.Text += string.Format("{0}:{1} “, item.Name, item.Value); } …
基本上ExifLibrary的大致操作就是那麼簡單,但是有一些要注意的事,就是ExifLibrary之所以好用在於它的架構切的還不錯,雖然我們透過ExifFile.Properties看到的都是ExifProperty型態(像是ExifURational就是繼承ExifProperty的類別),但不轉成本來的型態我們能取用的資訊就會有限。
因此在撰寫時若需要更詳細、更細部的資料的話,我們必須注意他本來的型態為何。
然後像下面這樣轉型後取用就可以了:
… var xResolution = (ExifURational)exifFile.Properties[ExifTag.XResolution]; var xResolutionNumerator = (int)xResolution.Value.Numerator; var xResolutionDenominator = (int)xResolution.Value.Denominator; …
最後附上筆者用來測試的完整程式碼片段:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ExifLibrary;
namespace WindowsFormsApplication34 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void btnLoad_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
var photoFile = openFileDialog1.FileName;
ExifFile exifFile = ExifFile.Read(photoFile);
pbxThumbnail.Image = exifFile.Thumbnail.ToBitmap();
tbxMessage.Clear();
foreach (ExifProperty item in exifFile.Properties.Values)
{
tbxMessage.Text += string.Format("{0}:{1}
“, item.Name, item.Value); } } } } }
運行後可看到圖片內含的所有Exif資訊。
Link
ExifLibrary for .NET