2011年3月7日 星期一

.NET 存取 圖片EXIF資訊

要使用.NET的BCL來讀取圖片的EXIF資訊,可以使用以下方法:



   1:  Image img = Image.FromFile("圖檔路徑");
   2:  PropertyItem[] pt = img.PropertyItems;

所取回的pt陣列內的資訊即EXIF,但是美中不足的是
裡面的資訊均為ASCII碼,尚須要自行轉換,麻煩的很。

所以在www.codeproject.com網站中,有好心人已經將苦差事做完了。
網址在 : EXIFextractor library to extract EXIF information

至網站下載原始碼或組件,便可以使用以下的程式碼列舉出照片的所有EXIF資訊了。


   1:  Goheer.EXIF.EXIFextractor er2 = 
   2:    new Goheer.EXIF.EXIFextractor(@"圖片路徑", "", "");
   3:  foreach (System.Web.UI.Pair s in er2)
   4:  {
   5:      Console.WriteLine(s.First + " : " + s.Second);
   6:  }
   7:  Console.WriteLine(er2["User Comment"]);

結果如下:


自訂 字串轉日期 的格式

在一般文章常常看到的都是日期轉字串輸出..
但是如果是字串轉日期要接入程式中處理...就很不常見了..

DateTime類別中提供了ParseExact 方法,
能夠協助我們任何格式的日期字串轉換為DateTime物件..
例如  "2011:02:25 17:56:56"  這樣的字串,一般DateTime的Parse方法是轉不過的.
因為年月日之間的間隔符號為 " : ",所以無法用一般的方法來轉換.

所以可以使用以下的程式碼


   1: CultureInfo provider = CultureInfo.InvariantCulture;
   2: string dateString = "2011:02:25 17:56:56";
   3: string format = "yyyy:MM:dd HH:mm:ss";
   4: DateTime result = DateTime.ParseExact(dateString, format, provider);
   5: Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());

該方法有三個參數

1. 日期字串,包含要轉換的日期和時間。

2. 格式化字串,定義轉換日期字串的所需格式。

        可使用標準 DateTime 格式模式與自訂的 DateTime 格式模式
        詳細資訊可參考DateTimeFormatInfo 類別

3. 格式化provider,提供關於日期字串的文化特性資訊。

        如果不使用,可以跟上述程式碼一樣,使用
        "CultureInfo.InvariantCulture"來取得與文化特性無關的文化特性物件