JPEG/Exif/TIFF格式解读(4):win10照片旋转win7不识别
xif元数据根据不同的内容分布在五个不同的IFD中。
IFD0中的数据是由TIFF定义的基本图像数据,其中有些与照片无关,所以Exif只实现其中一小部分。这部份数据在Photoshop中称为TIFF元数据。
Exif subIFD中的数据是由Exif定义的元数据,都是和相机照片有关的数据,是Exif的主要数据,其中有一些与IFD0中的重复。
GPS subIFD 中的数据是记录照片的拍摄位置,对于没有GPS功能的相机,这里的数据都是空的。
IFD1中的数据是缩略图的图像及该图像的元数据。
Maskernote IFD中是制造商自己定义的元数据,没有标准,有些商家的数据也不对外公开。
一般谈论的Exif数据都是指Exif subIFD 和IFD0 中的数据。
Exif数据是在拍摄时由相机软件生成並嵌入到JPG文件中,没有规定必需生成哪些数据,一般就选几个常用的,不同厂商也有不同的选择,这就是为什么不同相机拍的照片其Exif所包含的内容不一样。
Exif定义了大量的元数据,其中有一部分很少用到,还有一些比较直观易懂,这里仅对几个容易产生疑问的做些解释。
exif信息解读
比如某相机拍摄出来的相片,文件分辨率比如宽度7360像素,高度4912像素
十进制表示为 DEC : 7360 * 4912
十六进制则为 HEX : 1CC0 * 1330
默认情况下,会在00000030:07标志位(不同设备或程序生成的图片的标志位会有所不同,由EXIF内容而定)上存放01值表示原始文件的位置,无论这张图是横着拍的还是坚着拍的,初始值为01
拍摄时相机方位,横向还是纵向。用数值表示旋转的方向,但更多是先设定原始图片的上边为0行,左边为0列,用行列的位置来解读转动的方位,所以“上左”(0行为上,0列为左)为原始位置,“右上”(0行为右,0列为上)即上边变为右边,左边变为上边,顺时针转90度。如下表所示。 x
| 数值 | 0行 0 列 | 旋转说明 |
| 0 | 上左 | 原始位置 |
| 3 | 下右 | 180度 |
| 6 | 右上 | 顺时针90度 |
| 8 | 左下 | 逆时针 90 度 |
那么图片,在Windows 10操作系统下,通过操作系统自带的“相片”程序进行旋转时,仅仅对此标志位进行改变,而图片的内容不会做任何改变,包括旋转后的宽度与高度也不会做改变,包括JPEG和EXIF中的宽度与高度信息。
向右旋转90度,标志位为06
再向右旋转90度,即旋转了180度,标志位为03
再向右旋转90度,即旋转了270度,标志位为08
再向右旋转90度,即旋转了360度,回到原图,标志位还原为01
然而,在Windows 10进行旋转的图片,如果在Windows XP或Windows 7上面通过“相片”进行查看仍然显示为未旋转前的图片,因为不识别这个标志位。
资源管理器在显示分辨率那一栏中也自然是无法识别,低版本的程序无法识别高版本的标志位导致的问题。
于是,在处理旋转过后的图片,通过JDK 8.0版本去读取javax.imageio.ImageIO.read(new File(fileName)).getWidth/getHeight宽度和高度时,也是无法获知到底是不是旋转过的。
包括其他比如HypeSnap 5.6.0版本的一些旧程序,在打开时都会由于不支持这种方式而导致仍是未旋转的问题。
试过JDK 8.0/9.0/10.0均无法识别,目前最新版本的OpenJDK 13.0版本也没能识别出来旋转后的分辨率。
但是,如果是在Windows XP或Windows 7当中,对图片文件进行旋转时,文件的内容做了全面的变化。旋转后的宽度与高度也会改变并保存到EXIF中,图片内容的改变。这样旋转后的文件在其他操作系统上进行打开时都是正确的旋转后的结果。
Windows 下用缩略图视图查看图像会按照【第一步读取当前文件夹下Thumbs.db – 如果没有Thumbs.db文件则读取图像exif缩略图信息 – 如果图像文件没有exif缩略图信息则生成缩略图信息并保存至Thumbs.db】如此规则循环。
其他还有水平翻转,垂直翻转等,因照片拍摄没有这样的功能,所以没有列出。
需要指出的是只有能识别方向参数的图像软件(如Acdsee,Photoshop)才能在查看图像时自动旋转,Windows下的图片查看器没有这种功能。
|
名称 水平分辨率 |
Tag 0X011A Tag 0XA20E |
所在目录 IFD0 所在目录 Exif SubIFD |
|
名称 垂直分辨率 |
Tag 0X111B Tag 0XA20F |
所在目录 IFD0 所在目录 Exif SubIFD |
|
名称 分辨率单位 (英寸/厘米) |
Tag 0X0128 Tag 0XA210 |
所在目录 IFD0 所在目录 Exif SubIFD |
Exif工具
Exiv2:一个基于C++、跨平台的程序,可以读写图片元数据(EXIF, IPTC, XMP)。它提供了可执行文件供命令行使用,也提供了C++的API供编程。
在前端领域,可以通过exif-js识别图片的exif信息
https://www.npmjs.com/package/exif-js
参考资料:
图片文件Exif信息详细说明 blog.sina.com.cn/s/blog_651251e60102uz3d.html#AboutExif
图像Exif信息 元数据(Metadata) https://www.jianshu.com/p/a6d67df60e7e
关于图片文件旋转JPEG与EXIF信息 https://blog.csdn.net/yulimin/article/details/102827865
https://www.media.mit.edu/pia/Research/deepview/exif.html
https://baike.baidu.com/item/Exif/422825?fr=aladdin
读取JPG图片的Exif属性(一) - Exif信息简介 https://blog.csdn.net/fioletfly/article/details/53605959
读取JPG图片的Exif属性(二) - C代码实现 https://blog.csdn.net/fioletfly/article/details/54094940
读取JPG图片的Exif属性(三) - Exif属性读取GPS信息代码(C/C++实现)https://blog.csdn.net/fioletfly/article/details/54133422
在jpg图片添加Exif信息的C程序实现 https://blog.csdn.net/psy6653/article/details/79658144
JPEG添加EXIF https://blog.csdn.net/weixin_43549602/article/details/84654965
jpeg图片格式详解 https://blog.csdn.net/yun_hen/article/details/78135122
压缩算法——JPEG2000 编解码原理 https://blog.csdn.net/ytang_/article/details/76571635
PNG、JPEG、BMP等几种图片格式详解 https://www.jianshu.com/p/f5557c0e689e
使用HTTP2和渐进式JPEG图片更快的加载图像 http
转载本站文章《JPEG/Exif/TIFF格式解读(4):win10照片旋转win7不识别。》,
请注明出处:https://www.zhoulujun.cn/html/theory/multimedia/CG-CV-IP/8399.html
JPEG/Exif/TIFF格式解读(4):win10照片旋转win7不识别的更多相关文章
- 利用exif.js解决ios或Android手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- 详解exif.js,应用于canvas照片倒转(海报H5)
业务背景,苹果手机调用上传接口拍照没有问题但是上传到网页上照片倒转了解决方法利用exif.js读取图片参数并对图片进行元数据修改 window.btoa(str)转码 window.atob(base ...
- 利用exif.js解决ios手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- 利用exif.js解决手机上传竖拍照片旋转90\180\270度问题
原文:https://blog.csdn.net/linlzk/article/details/48652635/ html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针 ...
- 恢复Win10照片查看器
批处理文件: @echo off&cd\&color 0a&cls echo 恢复Win10照片查看器 reg add "HKLM\SOFTWARE\Microsof ...
- mismatch位置(MD tag)- sam/bam格式解读进阶
这算是第二讲了,前面一讲是:Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶 MD是mismatch位置的字符串的表示形式,貌似在call SNP和indel的时候会用 ...
- 在VC下显示JPEG、GIF格式图像的一种简便方法
在VC下显示JPEG.GIF格式图像的一种简便方法 一. 引言 JPEG图像压缩标准随然是一种有损图像压缩标准,但由于人眼视觉的不敏感,经压缩后的画质基本没有发生变化,很快便以较高的压缩率得到了广泛 ...
- 非IMU模式下DML语句产生的REDO日志内容格式解读
实验内容:非IMU模式下DML语句产生的REDO日志内容格式解读 最详细的解读是UPDATE的. 实验环境准备 11G中默认是开启IMU特性的,做此实验需要关闭此特性. alter system se ...
- 如何将JPG格式的图片转化为带地理坐标的TIFF格式
最近有个项目需要用到开源软件GeoServer,数据源是一张高分辨率的2.5维图片,格式是jpg的,由于GeoServer不支持jpg格式的发布,因此考虑到要进行格式转换,将其转换成tiff格式. 1 ...
- 创世区块配置文件genesis.json的格式解读
创世区块配置文件genesis.json的格式解读 中文网站上关于genesis 的解析大多数都来自于这个Gist:Ethereum private network configuration gui ...
随机推荐
- 实战攻防演练-Linux写入ssh密钥,利用密钥登录
前言 密钥形式登录的原理是利用密钥生成器制作一对密钥,一只公钥和一只私钥.将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录.这样一来,没有私钥,任何人都无法通过 SSH 暴力破解 ...
- 轻松一刻|Walrus CLI与CI/CD工具集成,轻松部署2048游戏
Walrus 是一款开源的基于平台工程理念.以应用为中心.以完整应用系统自动化编排交付为目标进行设计开发的云原生应用平台,简化和自动化应用部署与发布流程并与现有的 CI/CD 流水线无缝集成.今天我们 ...
- 一个小型markdown读写编辑器推荐
在作业完成时我和很多同学们发现并没有很好地利用博客园里面自带的markdown标记语法的形式完成作业 因此我在网上自己搜索发现了这款软件 下载地址 在帮助里可以学到一些简单的使用形式 可以方便编辑已有 ...
- 【Android】打卡app 今日完成情况记录
已完成内容:页面的设计.数据库的建立 今日目标:实现数据库的增删改查,并能够在页面实现输出 逻辑: 1.用户进入注册页面,进行注册,注册成功后,可以成功登录(这一阶段就完成了) 2.登录后,显示用户的 ...
- JavaWeb项目练习(学生选课管理系统)三【登录功能】
需求: 首页为用户登录页面,管理员,教师,学生三种角色用户登录后,进入相应的功能页. 在index.jsp文件里跳转到login.jsp页面,为了更好地书写 <%@ page contentTy ...
- CodeForces - 764C
C. Timofey and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- 【Python微信机器人】第六篇:优化使用方式,可pip安装
优化内容 这篇不聊技术点,说一下优化后的Python机器人代码怎么使用,优化内容如下: 将hook库独立成一个库,发布到pypi,可使用pip安装 将微信相关的代码发布成另一个库,也可以pip安装 g ...
- 小市值选股策略代码分享(附python源码)
小市值选股策略的核心在于通过综合分析公司的基本面.行业定位.财务健康状况以及市场趋势, 来寻找那些被市场低估但具备显著成长潜力的股票,同时也要重视风险管理和投资组合的多样化. 今天来给大家分享下小市值 ...
- 华企盾DSC:wps个人模式无策略组新建的文件仍然加密
解决方法:右键wps安装目录手动解密即可(原因:wps模板被加密导致)
- 神经网络优化篇:详解归一化输入(Normalizing inputs)
归一化输入 训练神经网络,其中一个加速训练的方法就是归一化输入.假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤: 零均值 归一化方差: 希望无论是训练集和测试集都是通过相同的\(μ\)和 ...