xif元数据根据不同的内容分布在五个不同的IFD中。

  1. IFD0中的数据是由TIFF定义的基本图像数据,其中有些与照片无关,所以Exif只实现其中一小部分。这部份数据在Photoshop中称为TIFF元数据。

  2. Exif subIFD中的数据是由Exif定义的元数据,都是和相机照片有关的数据,是Exif的主要数据,其中有一些与IFD0中的重复。

  3. GPS subIFD 中的数据是记录照片的拍摄位置,对于没有GPS功能的相机,这里的数据都是空的。

  4. IFD1中的数据是缩略图的图像及该图像的元数据。

  5. 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中的宽度与高度信息。

  1. 向右旋转90度,标志位为06

  2. 再向右旋转90度,即旋转了180度,标志位为03

  3. 再向右旋转90度,即旋转了270度,标志位为08

  4. 再向右旋转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不识别的更多相关文章

  1. 利用exif.js解决ios或Android手机上传竖拍照片旋转90度问题

    html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...

  2. 详解exif.js,应用于canvas照片倒转(海报H5)

    业务背景,苹果手机调用上传接口拍照没有问题但是上传到网页上照片倒转了解决方法利用exif.js读取图片参数并对图片进行元数据修改 window.btoa(str)转码 window.atob(base ...

  3. 利用exif.js解决ios手机上传竖拍照片旋转90度问题

    html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...

  4. 利用exif.js解决手机上传竖拍照片旋转90\180\270度问题

    原文:https://blog.csdn.net/linlzk/article/details/48652635/ html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针 ...

  5. 恢复Win10照片查看器

    批处理文件: @echo off&cd\&color 0a&cls echo 恢复Win10照片查看器 reg add "HKLM\SOFTWARE\Microsof ...

  6. mismatch位置(MD tag)- sam/bam格式解读进阶

    这算是第二讲了,前面一讲是:Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶 MD是mismatch位置的字符串的表示形式,貌似在call SNP和indel的时候会用 ...

  7. 在VC下显示JPEG、GIF格式图像的一种简便方法

    在VC下显示JPEG.GIF格式图像的一种简便方法 一. 引言  JPEG图像压缩标准随然是一种有损图像压缩标准,但由于人眼视觉的不敏感,经压缩后的画质基本没有发生变化,很快便以较高的压缩率得到了广泛 ...

  8. 非IMU模式下DML语句产生的REDO日志内容格式解读

    实验内容:非IMU模式下DML语句产生的REDO日志内容格式解读 最详细的解读是UPDATE的. 实验环境准备 11G中默认是开启IMU特性的,做此实验需要关闭此特性. alter system se ...

  9. 如何将JPG格式的图片转化为带地理坐标的TIFF格式

    最近有个项目需要用到开源软件GeoServer,数据源是一张高分辨率的2.5维图片,格式是jpg的,由于GeoServer不支持jpg格式的发布,因此考虑到要进行格式转换,将其转换成tiff格式. 1 ...

  10. 创世区块配置文件genesis.json的格式解读

    创世区块配置文件genesis.json的格式解读 中文网站上关于genesis 的解析大多数都来自于这个Gist:Ethereum private network configuration gui ...

随机推荐

  1. 资源迁移OSS方案记录

    视频资源迁移到OSS服务器上,记录一下迁移过程. 搭建流程 在阿里云上购买oss,并获取具有该Bucket访问权限的AccessKey ID和AccessKey Secret信息. 数据迁移方案一 第 ...

  2. Java Web程序在Tomcat上是如何运行的

    https://blog.csdn.net/fuzhongmin05/article/details/104379514 一个JVM是一个进程,JVM上跑Tomcat,Tomcat上可以部署多个应用. ...

  3. .Net Core 3.1升级 .Net 5后出现代码错误 rzc generate exited with code 1.

    安装.Net 5后出现错误,错误定位到了CodeGeneration相关的文件,找了半天也不知道哪里的问题. 升级类库,清理解决方案,删除obj.bin文件夹什么的卵用没有. 最后发现升级.Net 5 ...

  4. HelloGitHub 社区动态,开启新的篇章!

    今天这篇文章是 HelloGitHub 社区动态的第一篇文章,所以我想多说两句,聊聊为啥开启这个系列. 我是 2016 年创建的 HelloGitHub,它从最初的一份分享开源项目的月刊,现如今已经成 ...

  5. 通过计算巢轻松部署ROS自定义资源

    概述 阿里云资源编排服务ROS(Resource Orchestration Service)可以帮助您简化云计算资源的管理.遵循ROS定义的模板规范,您可以定义所需云计算资源的集合及资源间的依赖关系 ...

  6. C#_Win32_PInvoke源码生成器

    介绍 一个源代码生成器,用于向 C#项目添加一组用户定义的 Win32 P/Invoke 方法和相关的类型. 链接地址: https://github.com/microsoft/CsWin32 还在 ...

  7. 【Dotnet 工具箱】推荐一个 Flutter 和 .NET 开源的实时聊天 APP

    1. 推荐一个 Flutter 和 .NET 开源的实时聊天 APP Heyy-chat-app Heyy-chat-app 是一个开源的聊天应用,使用 Flutter.Asp.Net Core We ...

  8. HOLMES通过关联可疑信息流进行实时 APT 检测

    HOLMES 通过关联可疑信息流进行实时 APT 检测 基本信息 题目:HOLMES: Real-time APT Detection through Correlation of Suspiciou ...

  9. 华企盾DSC发送白名单提示“解密发送失败”(被中转服务器判定为垃圾邮箱)

    解决方法:用DebugView监控,发现含有550错误,说明中转服务器被判定为垃圾邮箱,换一个中转邮箱或者设置为无中转发送 还有一种可能:邮箱设置了收到邮箱后自动删除 ​ DebugView中显示上图 ...

  10. python tkinter使用(九)

    python tkinter使用(九) 本文主要讲下scrolledText中图片的插入,以及常见的错误. 使用Image.open来打开图片 使用ImageTk.PhotoImage()方法将图片转 ...