C#图片处理之: 获取数码相片的EXIF信息(二)
还是边看个实例边聊吧,我们会讨论一些常用的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信息(二)相关推荐
- 用C#读取数码相片的EXIF信息(一)
现在的数码相机拍摄出来的照片表面上看都是很普通的JPEG的图片,但通常还包含着诸如相片拍摄时使用的相机生产商.型号.光圈值.快门速度等各类附加信息,这就是所谓的Exif信息.Exif是一种图像文件格式 ...
- 使用libexif开源库修改jpeg相片exif信息
使用libexif开源库修改jpeg相片exif信息 libexif简介 一.读exif信息 二.写exif信息 说明 例:修改exif中GPS海拔高度 libexif简介 libexif是一个开源的 ...
- MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标
前言 没有前言,创作不易,希望家人们点点赞,如有错误评论留言,感谢支持! 文章目录 前言 一.MATLAB批量读取航摄相片的EXIF信息,并批量提取其GNSS经纬度信息 (1)前述: (2)代码实现和 ...
- Elasticsearch - Indices stats 获取索引级别的统计信息之三 【indexing】索引操作信息
文章目录 一.获取索引操作统计信息 1.获取所有索引的indexing信息 2.获取指定索引的indexing信息 3.获取同类索引的indexing信息 二.输出结果 三.结果详情 1._shard ...
- Elasticsearch - Indices stats 获取索引级别的统计信息之六 【segments】段的内存使用情况
文章目录 一.获取segments内存使用信息 1.获取所有索引的segments信息 2.获取指定索引的segments信息 3.获取同类索引的segments信息 二.输出结果 三.可选参数:in ...
- C# 获取图片的EXIF 信息
关于 EXIF 信息的介绍. 1 EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写.EXIF是一种图像文件格式,只是文件的后缀名为jpg.EXIF信息是由数码相 ...
- 轻松获取图片和视频文件的Exif信息-Java篇
前言 随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速.便捷.由于无人机本身不进行相关数据的处理,比如全景地图的生成.视频的信息 ...
- Windows Vista中强大的数码相片处理功能(转)
Windows Vista中强大的数码相片处理功能(转)[@more@] 有数码相机的人越来越多,因为拍摄成本低,所以很多人拍照的时候都是不假思索狂按快门,不知不觉中成百上千张相片就这样照出来了.可是 ...
- Java BufferImage图片处理(获取宽高、图片截取、转换灰度图)
Java BufferImage图片处理(获取宽高.截取.转换灰度图) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Java读取图片为byte[]数组,或者BufferedImage及互相转 ...
最新文章
- 编程上标和下标使用方法
- python变量词是什么意思_python1变量,表达式和语句
- 小白视觉第一步保存图片
- C++多线程快速入门(二)共享数据同步以及数据竞争
- 聊聊Spring Cloud版本的那些事儿
- linux霸天虎3.6.1+windows平台 无线WEB CRACK
- HTML+CSS 模仿淘宝部分网页(未实现事件)
- 经典动态规划:打家劫舍系列问题
- c语言通过编译器编译转换为机器码,assembler - TechTarget数据中心
- 360木马云查杀结果(非常有讽刺意义)
- wifi动不动就断开_解决iPad连接wifi网络经常中断(转)
- 在谷歌浏览器上面安装AxueRP插件。
- 诺基亚发布NetAct云网络管理系统,为5G网络演进铺路
- python图像纹理提取_提取图像的颜色、纹理特征(传统算法)
- shader流光+自发光
- 《Python计算机视觉编程》一书中关于增强现实茶壶显示的程序
- 【Turtle表白系列】你为什么还单身 ?因为昨天才遇见你。(爱心升级版本来袭)
- linux下more命令的使用
- 外汇套期保值交易策略
- WPF-22:WPF绘制五角星改进版(增加半个五角星的绘制)
热门文章
- 微信小程序下载图片保存到本地
- php手机网站支付宝_PHP实现支付宝手机网站支付功能
- html5 自带video内存泄露_C++ 如何避免内存泄露?
- Mysql 电商常用的时间操作(当天,昨天,7天,30天,半年,全年,季度等等)...
- 关于Python的那些话
- css的white-space属性导致了空格问题——查看十六进制发现2020变成了c2a0
- spring cloud gateway Unhandled failure: Only one connection receive subscriber allowed.
- 常用设计模式——创建型
- 【PowerShell】PS中 the fuck 插件(PoShFuck)将 wtf 搜索引擎从 Google 改为 Baidu 或者 Bing
- parse python函数_Python爬虫 - parse模块常用方法