还是边看个实例边聊吧,我们会讨论一些常用的ExifPropertyTagID,并了解如何得到它们的值。请牢记,MSDN是很好的资源。

随便打开张我拍的照片,按上次说的方法扫描每一个Exif属性项目。
第一项的ID是0x010F。查MSDN,发现是“Null-terminated character string that specifies the manufacturer of the equipment used to record the image.”,原来是相机的制造商啊。再一看,Type == 2,嗯,还真不矛盾,调用解Type==2的函数:
private static string GetValueOfType2(byte[] b)
{
 return System.Text.Encoding.ASCII.GetString(b);
}

于是得到这样的文字:
EASTMAN KODAK COMPANY

没错,我的正是柯达。继续往下看,第二项的ID是0x0110,老规矩MSDN,发现是“Null-terminated character string that specifies the model name or model number of the equipment used to record the image.”,原来是型号。Type还是2,继续调用刚才的函数,结果就是:
KODAK Z7590 ZOOM DIGITAL CAMERA
完全正确,加十分。

接着往下走,看到有个ID==0x8827(ISO Speed)的类型是3。查MSDN得知是16位无符号整数。把Value[1]左移8位放在Value[0]之前就可以了。
private static string GetValueOfType3(byte[] b)
{
 f (b.Length != 2) return "无效的类型(3)";
 return Convert.ToUInt16(b[1] << 8 | b[0]).ToString();
}
我的值是80,没错。0xA002和0xA003一起描述了图片的原始大小,也可用这个方法求出来。

Type==4和Type==3情况类似,只不过Type=4时表示一个32位的无符号整数。
private static string GetValueOfType4(byte[] b)
{
 if (b.Length != 4) return "无效的类型(4)";
 return Convert.ToUInt32(b[3] << 24 | b[2] << 16 | b[1] << 8 | b[0]).ToString();
}
例子是ID==0x0202(JPEG Inter Length)

Type==5也比较多,例如曝光时间(0x829A)。
这种类型包含了两个无符号的长整型数字。但处理起来也并不难。把8个字节分成两份,Value[0~3]是分母,Value[4~7]是分子。但同样别忘了移位。
private static string GetValueOfType5(byte[] b)
{
 if (b.Length != 8) return "无效的类型(5)";

UInt32 fm, fz;
 fm = 0;
        fz = 0;

fz = Convert.ToUInt32(b[7] << 24 | b[6] << 16 | b[5] << 8 | b[4]);
        fm = Convert.ToUInt32(b[3] << 24 | b[2] << 16 | b[1] << 8 | b[0]);

return fm.ToString() + "/" + fz.ToString();
}
我的样本照片曝光时间是1/500。同类型的比较常用的ID还有0x829D(F-Number),0x011A,0x011B(分别代表x/y方向上的分辨率),0x9202(Lens aperture)等。

Type==7的比较乱,至少我的柯达图片不能被用统一的方式解码。0x9000(Exif版本),0xA000(Exif FPX版本)可以这么求:
private static string GetValueOfType7A(byte[] b)
{
            string rtn = "";

for (int i = 0; i < b.Length; i++)
            {

rtn += ((char)b[i]).ToString();

}

return rtn;
}

但0x9101(Exif压缩配置)需要这么解码才正确:
private static string GetValueOfType7B(byte[] b)
{
            string rtn = "";

for (int i = 0; i < b.Length; i++)
            {

rtn += b[i].ToString();

}

return rtn;
}

搞不懂,谁知道请告诉我。

最后看一下类型10。其实和类型5差不多,只不过类型10是有符号的,这里也就不多罗嗦了。

C#图片处理之: 获取数码相片的EXIF信息(二)相关推荐

  1. 用C#读取数码相片的EXIF信息(一)

    现在的数码相机拍摄出来的照片表面上看都是很普通的JPEG的图片,但通常还包含着诸如相片拍摄时使用的相机生产商.型号.光圈值.快门速度等各类附加信息,这就是所谓的Exif信息.Exif是一种图像文件格式 ...

  2. 使用libexif开源库修改jpeg相片exif信息

    使用libexif开源库修改jpeg相片exif信息 libexif简介 一.读exif信息 二.写exif信息 说明 例:修改exif中GPS海拔高度 libexif简介 libexif是一个开源的 ...

  3. MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标

    前言 没有前言,创作不易,希望家人们点点赞,如有错误评论留言,感谢支持! 文章目录 前言 一.MATLAB批量读取航摄相片的EXIF信息,并批量提取其GNSS经纬度信息 (1)前述: (2)代码实现和 ...

  4. Elasticsearch - Indices stats 获取索引级别的统计信息之三 【indexing】索引操作信息

    文章目录 一.获取索引操作统计信息 1.获取所有索引的indexing信息 2.获取指定索引的indexing信息 3.获取同类索引的indexing信息 二.输出结果 三.结果详情 1._shard ...

  5. Elasticsearch - Indices stats 获取索引级别的统计信息之六 【segments】段的内存使用情况

    文章目录 一.获取segments内存使用信息 1.获取所有索引的segments信息 2.获取指定索引的segments信息 3.获取同类索引的segments信息 二.输出结果 三.可选参数:in ...

  6. C# 获取图片的EXIF 信息

    关于 EXIF 信息的介绍. 1  EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写.EXIF是一种图像文件格式,只是文件的后缀名为jpg.EXIF信息是由数码相 ...

  7. 轻松获取图片和视频文件的Exif信息-Java篇

    前言 随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速.便捷.由于无人机本身不进行相关数据的处理,比如全景地图的生成.视频的信息 ...

  8. Windows Vista中强大的数码相片处理功能(转)

    Windows Vista中强大的数码相片处理功能(转)[@more@] 有数码相机的人越来越多,因为拍摄成本低,所以很多人拍照的时候都是不假思索狂按快门,不知不觉中成百上千张相片就这样照出来了.可是 ...

  9. Java BufferImage图片处理(获取宽高、图片截取、转换灰度图)

    Java BufferImage图片处理(获取宽高.截取.转换灰度图) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Java读取图片为byte[]数组,或者BufferedImage及互相转 ...

最新文章

  1. 编程上标和下标使用方法
  2. python变量词是什么意思_python1变量,表达式和语句
  3. 小白视觉第一步保存图片
  4. C++多线程快速入门(二)共享数据同步以及数据竞争
  5. 聊聊Spring Cloud版本的那些事儿
  6. linux霸天虎3.6.1+windows平台 无线WEB CRACK
  7. HTML+CSS 模仿淘宝部分网页(未实现事件)
  8. 经典动态规划:打家劫舍系列问题
  9. c语言通过编译器编译转换为机器码,assembler - TechTarget数据中心
  10. 360木马云查杀结果(非常有讽刺意义)
  11. wifi动不动就断开_解决iPad连接wifi网络经常中断(转)
  12. 在谷歌浏览器上面安装AxueRP插件。
  13. 诺基亚发布NetAct云网络管理系统,为5G网络演进铺路
  14. python图像纹理提取_提取图像的颜色、纹理特征(传统算法)
  15. shader流光+自发光
  16. 《Python计算机视觉编程》一书中关于增强现实茶壶显示的程序
  17. 【Turtle表白系列】你为什么还单身 ?因为昨天才遇见你。(爱心升级版本来袭)
  18. linux下more命令的使用
  19. 外汇套期保值交易策略
  20. WPF-22:WPF绘制五角星改进版(增加半个五角星的绘制)

热门文章

  1. 微信小程序下载图片保存到本地
  2. php手机网站支付宝_PHP实现支付宝手机网站支付功能
  3. html5 自带video内存泄露_C++ 如何避免内存泄露?
  4. Mysql 电商常用的时间操作(当天,昨天,7天,30天,半年,全年,季度等等)...
  5. 关于Python的那些话
  6. css的white-space属性导致了空格问题——查看十六进制发现2020变成了c2a0
  7. spring cloud gateway Unhandled failure: Only one connection receive subscriber allowed.
  8. 常用设计模式——创建型
  9. 【PowerShell】PS中 the fuck 插件(PoShFuck)将 wtf 搜索引擎从 Google 改为 Baidu 或者 Bing
  10. parse python函数_Python爬虫 - parse模块常用方法