首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用.net框架(System.Drawing.Imaging)读取exif数据

用.net框架(System.Drawing.Imaging)读取exif数据
EN

Stack Overflow用户
提问于 2012-06-21 21:02:31
回答 3查看 2.6K关注 0票数 0

我使用.net框架从jpg文件中读取EXIF元数据。问题是如何将PropertyItem.Value (即字节数组)转换为可读形式,如字符串。

例如,我用下面的代码读取图片的GPSAltitude值:

代码语言:javascript
复制
        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英里。但是如何从字节数组转到587呢?

我试着用ASCIIencoding和其他一些编码来读取它,但是我得到了类似于"K\0\0\0\0\0“的东西。

有什么想法吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-21 21:09:16

BitConverter可能会起作用。

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2012-06-21 21:32:14

除了已经给出的答案之外,您可能还想查看实际的Exif spec

GPSAltitude (第47页)

指示基于GPSAltitudeRef中的参考的高度。高度表示为一个有理值。参考单位是米。

GPSAltitudeRef (第47页)

指示用作参考高度的高度。如果参考为海平面,且高度高于海平面,则为0。如果海拔低于海平面,则会给出值1,并在GPSAltitude标记中将海拔指示为绝对值。参考单位是米。请注意,与其他引用标记不同,此标记为BYTE类型。

RATIONAL (第14页)

两个长的。第一个LONG是分子,第二个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。其他答案解释了如何获得答案,但希望这解释了为什么会这样。

票数 5
EN

Stack Overflow用户

发布于 2012-06-21 21:15:32

只需将您的byte[]转换为int,即可查看预期的587值:

代码语言:javascript
复制
var pic = System.Drawing.Image.FromFile(@"c:\mypic.jpg");         
var GPSAltitude = pic.GetPropertyItem(6); 
var altitude = System.BitConverter.ToInt32(GPSAltitude,0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11138769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档