Jeff 隨手記

記下學習的點滴,它日回頭看來就是成長 ~

文章數(167) 回應數(1162) 引用數(0)

讀取圖片檔裡的Exif資訊

2009/11/18 20:01 | 閱讀數 : 9668 我要推薦 | 文章分類 : .Net隨手記 訂閱

有些像機拍完後的照片,裡面不只單純存放著影像,在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



  • VampireNeo 2009/11/19 下午 03:47 回覆

    # re: 讀取圖片檔裡的Exif資訊

    剛好想研究一下如何讀取Exif 的information, 謝了! ^^

  • 想用您的程式轉成VB2008 2011/10/26 上午 10:13 回覆

    # re: 讀取圖片檔裡的Exif資訊

    目前在研究您的程式,想用VB2008重寫一遍,已有部分成果,但有一段程式,如下:
    private string ExtractExifRational(ulong exifValue)
    {
    if ((int)(exifValue & 0xFFFFFFFFL) / (int)((exifValue & 0xFFFFFFFF00000000L) >> 32) * (int)((exifValue & 0xFFFFFFFF00000000L) >> 32) == (int)(exifValue & 0xFFFFFFFFL))
    {
    return (exifValue & 0xFFFFFFFFL) / (decimal)((exifValue & 0xFFFFFFFF00000000L) >> 32) + "";
    }
    else
    {
    return (decimal)(exifValue & 0xFFFFFFFFL) + "/" + (decimal)((exifValue & 0xFFFFFFFF00000000L) >> 32);
    }
    }
    因為我看不懂C,所以不了解意思,可以逐行解說嗎?或是舉一個數字說明計算過程,以便讓我可以轉成VB2008,謝謝。

  • 不了解C的用法 2011/10/26 下午 07:39 回覆

    # re: 讀取圖片檔裡的Exif資訊

    之前請您幫忙解釋程式,現今已研究出一些眉目了。這篇文章真的很有用,再次感謝。

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 5 and 3 and type the answer here: