关于 EXIF 信息的介绍。

1  EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写。EXIF是一种图像文件格式,只是文件的后缀名为jpg。EXIF信息是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在jpg文件的头部,也就是说EXIF信息是镶嵌在JPEG图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。不管是硬件厂商的配套软件还是专业名门的看图工具,所有这些软件都是为了方便数码摄影者能更方便地保存查看摄影图像的重要信息。

2  如何获取EXIF信息

在.NET中,我们可以用PropertyItem对象来获取jpg 图片的EXIF信息。取得PropertyItem很简单。

Image img = Image.FromFile("支持Exif的图片文件路径");

PropertyItem[] pt = img.PropertyItems;

这样就可以了,Exif信息都已载入到PropertyItem数组中了。其中PropertyItem的ID,Type,Value属性是最重要的。

ID可以唯一表明当前PropertyItem的含义。比如,0x010F代表相机制造商,0x8827代表ISO速度,0x829D代表相机。

Value永远都是字节数组,但具体内容的取值方法随Type不同而不同。

Type是个整数,表示的类型在MSDN中是这么描述的:

1 指定 Value 为字节数组。

2 指定 Value 为空终止 ASCII 字符串。如果将类型数据成员设置为 ASCII 类型,则应该将 Len 属性设置为包括空终止的字符串长度。例如,字符串“Hello”的长度为 6

3 指定 Value 为无符号的短(16 位)整型数组。

4 指定 Value 为无符号的长(32 位)整型数组。

5 指定 Value 数据成员为无符号的长整型对数组。每一对都表示一个分数;第一个整数是分子,第二个整数是分母。

6 指定 Value 为可以包含任何数据类型的值的字节数组。

7 指定 Value 为有符号的长(32 位)整型数组。

10 指定 Value 为有符号的长整型对数组。每一对都表示一个分数;第一个整数是分子,第二个整数是分母。

所以获取Exif信息的算法重点在于如何根据Type值将Value字节数组变成人类可以理解的值。

public void FindExifinfo(string filePath){Image img = Image.FromFile(filePath);PropertyItem[] pt = img.PropertyItems;for (int i = 0; i < pt.Length; i++){PropertyItem p = pt[i];            switch (pt[i].Id){  // 设备制造商 20. case 0x010F:this.textBox1.Text = System.Text.ASCIIEncoding.ASCII.GetString(pt[i].Value);break;           case 0x0110: // 设备型号 25. this.textBox4.Text = GetValueOfType2(p.Value);break;case 0x0132: // 拍照时间 30.this.textBox2.Text = GetValueOfType2(p.Value);break;         case 0x829A: // .曝光时间 this.textBox3.Text = GetValueOfType5(p.Value)+" sec";break;case 0x8827: // ISO 40.  this.textBox5.Text = GetValueOfType3(p.Value);break;case 0x010E: // 图像说明info.descriptionthis.textBox6.Text = GetValueOfType2(p.Value);break;case 0x920a: //相片的焦距this.textBox7.Text = GetValueOfType5A(p.Value) + " mm";break;case 0x829D: //相片的光圈值this.textBox8.Text = GetValueOfType5A(p.Value);break;default:break;}}}public string GetValueOfType2(byte[] b)// 对type=2 的value值进行读取
        {return System.Text.Encoding.ASCII.GetString(b);}private static string GetValueOfType3(byte[] b) //对type=3 的value值进行读取
        {if (b.Length != 2) return "unknow";return Convert.ToUInt16(b[1] << 8 | b[0]).ToString();}private static string GetValueOfType5(byte[] b) //对type=5 的value值进行读取
        {if (b.Length != 8) return "unknow";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()+" sec";}
private static string GetValueOfType5A(byte[] b)//获取光圈的值
        {if (b.Length != 8) return "unknow";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]);double temp = (double)fm / fz;return (temp).ToString();}

C# 获取图片的EXIF 信息相关推荐

  1. php exif信息,php通过exif_read_data函数获取图片的exif信息

    php获取图片的exif信息,php自带一个exif_read_data函数可以用来读取图片的exif信息,代码来自php手册 echo "test1.jpg: \n"; $exi ...

  2. JS获取图片的EXIF信息+纠正图片方向

    前端图片处理碰到的一个离奇 bug , 关于图片的 EXIF 信息,特地记录下来 . 然后使用一下代码可以获取Orientation信息,并纠正Orientation带来的图片旋转问题 // from ...

  3. 获取图片的EXIF信息如此困难?

    对于数码相机所拍摄出的图片,Exif信息非常重要.Exif是英语Exchangeable Image File(可交换图像文件)的缩写,最初由日本电子工业发展协会(JEIDA --Japan Elec ...

  4. php exif信息,php通过exif_read_data函数获取图片的exif信息_php技巧

    php获取图片的exif信息,php自带一个exif_read_data函数可以用来读取图片的exif信息,代码来自php手册 \n"; $exif = exif_read_data('te ...

  5. php exif信息,php通过exif_read_data函数获取图片的exif信息 PHP

    php获取图片的exif信息,php自带一个exif_read_data函数可以用来读取图片的exif信息,代码来自php手册 echo 'test1.jpg: \n'; $exif = exif_r ...

  6. java提取图像坐标_java获取图片的GPS信息

    简介 EXIF(Exchangeable Image File format)是"可交换图像文件"的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数. ...

  7. Java获取照片的Exif信息,并解析GPS

    Java获取照片的Exif信息,并解析GPS 1. 效果图 2. 什么是Exif? 3. 源代码 参考 ❤️ 这篇博客将介绍什么EXIF,以及如何用Java语言读取Exif信息,并转换经纬度为位置信息 ...

  8. java获取图片的GPS信息

    很简单,直接上代码 注意:通过微信发送的图片是获取不到GPS信息,我自己是通过usb上传测试的(打成压缩包传也可以) 引用依赖 <dependency><groupId>com ...

  9. 在Android下通过ExifInterface类操作图片的Exif信息

    什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.I ...

最新文章

  1. 地域和地方的区别_商标、品牌、LOGO,三者区别在哪里?
  2. linux下mysql-5.6忘记root密码,重置root密码详细过程
  3. 学习总结——实现生成excel表格(方法二)
  4. 超牛!读博期间,他以第一作者发表7篇文章
  5. Java基础,使用switch分支实现出计算器计算机功能,简单易理解
  6. Spring Boot入门(1)-第一个Spring Boot应用
  7. 人脸识别门禁系统java实现_基于 Java 实现的人脸识别功能(附源码)
  8. cloud2声卡_【箴言】带你解惑HyperX Cloud2(飓风)和Alpha(阿尔法)的终极选择
  9. 网线的交叉线和直通线原理
  10. java date 时分秒_java Date获取年月日时分秒的实现方法
  11. (五)Latex特殊符号
  12. MySQL按条件计数
  13. 视频手势画图python_如何裁剪视频
  14. RGB和HSV相互转换
  15. Xiaojie雷达之路---雷达原理(二刷)脉冲法测距
  16. python模拟登陆 验证码el_python 模拟登陆163邮箱
  17. 基于蓝牙串口通信,实现实时脉象采集(项目总结与思路梳理)
  18. Tkinter做弹球游戏
  19. ESP8266-01实战三——月球灯
  20. U盘为Linux加速,用u盘启动linux的步骤

热门文章

  1. GNU Make chapter 2 —— Makefile 介绍
  2. j.u.c.locks.AbstractQueuedSynchronizer.Node
  3. mysql ERROR 1045
  4. 8个免费实用的C++GUI库
  5. 关于对J2EE几点误解和错误认识的澄清
  6. iOS UIbutton 点击无反应的几种情况
  7. Solaris 上网配置
  8. 日常遇到的一些问题或知识的笔记(一)
  9. Android学习笔记之Android Studio添加新的Activity
  10. thinkphp实现登录后返回原界面