簡體   English   中英

使用.net框架(System.Drawing.Imaging)讀取exif數據

[英]Reading exif data with .net framework (System.Drawing.Imaging)

我正在使用.net框架從jpg文件讀取exif元數據。 問題是如何以可讀形式(例如字符串)轉換PropertyItem.Value(即字節數組)。

例如,使用此代碼,我讀取了圖片的GPSAltitude值:

        var pic = System.Drawing.Image.FromFile(@"c:\mypic.jpg");
        var GPSAltitude = pic.GetPropertyItem(6);

GPSAltitude.Value是一個字節數組,如下所示:{75,2,0,0,1,0,0,0}。

我知道海拔是587 msl ..但是我如何從該字節數組轉到587?

我嘗試使用ASCIIencoding和其他一些編碼來讀取它,但得到的內容類似於“ K \\ 0 \\ 0 \\ 0 \\ 0 \\ 0”。

任何想法 ? 謝謝

除了已經給出的答案之外,您可能還需要查看實際的Exif規范

GPSAltitude (第47頁)

根據GPSAltitudeRef中的參考值指示海拔高度。 高度表示為一個RATIONAL值。 參考單位是米。

GPSAltitudeRef (第47頁)

指示用作參考高度的高度。 如果參考為海平面且海拔高於海平面,則給出0。 如果海拔高度低於海平面,則給出的值為1,並且海拔高度在GPSAltitude標簽中表示為絕對值。 參考單位是米。 請注意,此標簽是BYTE類型,與其他參考標簽不同。

有理 (第14頁)

兩個長。 第一個LONG是分子,第二個LONG表示分母。

(頁14)

一個32位(4字節)無符號整數。

因此, {75, 2, 0, 0, 1, 0, 0, 0}{75, 2, 0, 0} / {1, 0, 0, 0} 當您將字節讀取為小尾數位時,將得到0000 0010 0100 1011 / 0000 0000 0000 0001 ,其計算結果為587。其他答案說明了如何獲得答案,但希望這可以解釋為什么會這樣。

可能BitConverter可以工作。

public static void Main()
   {

      byte[] bytes = {75, 2, 0, 0, 1, 0, 0, 0};
      int result = BitConverter.ToInt32(bytes, 0);
      Console.WriteLine("Returned value: {0}", result);
      Console.ReadLine();
   }

結果是:587

只需將byte[]轉換為一個int即可查看所需的587值:

var pic = System.Drawing.Image.FromFile(@"c:\mypic.jpg");         
var GPSAltitude = pic.GetPropertyItem(6); 
var altitude = System.BitConverter.ToInt32(GPSAltitude,0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM