讀取圖片檔裡的Exif資訊

有些像機拍完後的照片,裡面不只單純存放著影像,在Exif裡也存有不少的資訊,像是像機型號,快門值,光圈值及拍照日期等等,而這些Exif的資訊要怎麼寫程式去取得,除了用現有的套裝,其實自己寫起來也沒那麼的複雜.

有些像機拍完後的照片,裡面不只單純存放著影像,在Exif裡也存有不少的資訊,像是像機型號,快門值,光圈值及拍照日期等等,而這些Exif的資訊要怎麼寫程式去取得,除了用現有的套裝,其實自己寫起來也沒那麼的複雜.

 

這次會用到一個namespace,而這個namespace則必需加入兩個dll參考.

PresentationCore.dll

image

2. WindowsBase.dll

image 

 

 

加好了參考,我們就可以使用將用到的namespace

using System.Windows.Media.Imaging;

 

這樣準備工作就完成了,接下來就是Coding部份.

BitmapFrame bf = BitmapFrame.Create(imageUri, BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);

imageUrl是圖片所存放的路徑,當然也可以給Stream.

取得像機的型號只要這麼一行就可以抓到了.

((BitmapMetadata)bf.Metadata).CameraModel

 

那取得ISO值也是這麼做嗎? 當然不,BitmapMetadata可像.CameraModel直接取資訊的屬性並不多,有很多則要靠自己去Query.

((BitmapMetadata)bf.Metadata).GetQuery("/app1/ifd/exif/subifd:{uint=34855}")

怎麼知道ISO是34855,這就要看Exif的規範了,在它的規範內都寫的很清楚.所以其它資訊的代碼就可以參考Exif規範,而範例程式裡有寫好的是一些比較常見的資訊,有些需要轉換的,Sample Code裡有寫,在這就不再重覆了.

 

以下就是Sample Code跑出來的樣子,而照片主角就是自家的小狗啦~

image

 

*璉大也補了一篇VB版的,提供給需要的人:

[VBNET] Exif 資訊讀取

 

參考 :

BitmapFrame.Create 方法

BitmapMetadata 類別

Exif規格

原始碼 :ImageExifDemo.rar