可交换图像文件常被简称为ExifExchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。

Exif最初由日本电子工业发展协会在1996年制定,版本为1.0。1998年,升级到2.1,增加了对音频文件的支持。2002年3月,发表了2.2版。

Exif可以附加于JPEGTIFFRIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。

Windows 7操作系统为例,最简单的查看Exif信息的方法是右键点击图片打开菜单,点击属性并切换到详细信息标签下即可。

Exif信息是可以被任意编辑的,因此只有参考的功能。

Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。所以Exif信息最大为64 kB,而内部采用TIFF格式。

还有一个xmp文件,这里是adobe为了给raw读取提速而单独新增的一个附加文件

JPEG文件格式简述
JPEG文件的结构其实很简单和直观,你可以用一些专门的软件去查看,比如JPEGsnoop、MagicEXIF,你可以看到一个JPEG文件里有其实很多段(Marker),比如SOI、APP0、APP1、APP13、DQT、SOF0、DHT、EOI等等,每个段都储存了自己特定的信息,如DQT存的是用于解码的Zig Zag量化表的。不过,我们关注的一般是都是以APP开头的那些段,那些段在解码JPEG图像的时候不是必须的,但是它们储存了很多辅助的元数据。EXIF的信息就是储存在APP1段当中的。

下图中是用MagicEXIF打开的一张被Photoshop修改过的JPEG图像结构(置灰的段是与JPEG编码解码有关的,而没有置灰、以APP开头的段便是该图像的元数据):


当检测某JPEG文件是否为原图的时候,首先会检查有没有由编辑软件插入的APP段,比如Photoshop会插入APP13(Photoshop IRB 图像资源)、APP2(ICC色彩配置)、APP14等等的段,若果检测到这些段存在,则可以直接知道图像被编辑过了,无需往下继续检测。

如果没有这些段,则我们会继续关注具体的EXIF数据。

关于EXIF的结构这样也还是需要说一下,EXIF的全部项目是储存在一种叫IFD的结构中的,IFD就好像是文件夹一样,里面包括里具体的EXIF项目。APP1里一般可以找到2个主要的IFD项目:IFD0和IFD1,IFD0是主图的元数据,而IFD1则是缩略图的元数据,不过我们一般只关注主图的数据。在IFD0中除了自己的项目外,还包括了EXIF Sub IFD(下面简称“子IFD”)、GPS IFD,而子IFD中又进一步包括了Interoperability IFD(简称IOP)和MakerNote IFD,每个IFD存的都是跟独有的元数据。这个好像很复杂,你只需要记住的是,EXIF中有这么这么几个“文件夹”:IFD0存的是主图的图像信息,子IFD存的是拍摄信息、GPS IFD存的是图像的GPS地理数据、MakerNote IFD存的是厂商自己独有的注释(每个厂商的这一项都不一样),其他的可以暂时忽略。


在检测原图的时候,首先要看看在IFD0图像信息里面的“软件”一项(看上图)。这一项记录的是图像最后被修改的软件,原始的图像记录的内容应该是其固件的名字和版本(佳能的机器直接不记录这一项),所以如果这一项为“Adobe Photoshop XXX”或“meitu”之类的,那么图像也是一定被修改过的;如果是佳能的照片(可以参照上面的“制造商”一项),那么根本就不应该出现这一项,要是存在的话肯定也是被修改过的。
此外,也要看看IFD0里面的“修改时间”和子IFD中的“拍摄时间”以及“数字化时间”是否一致,因为很多图像编辑器在转存后会更新“修改时间”一项而不更新另外两项。



其次,另外一个最最重要的判断标准是否为原图的标准是MakerNote IFD存不存在。上面已经说过,MakerNote 就是相机厂商留下的自己的自定义注释,里面存了很多非EXIF定义的项目(比如快门次数、人脸检测等等),绝大部分图像编辑软件转存后会令图像丢失这部分信息



MakerNote 是储存在子IFD中的,因为每个厂商在这一栏储存的数据都是不一样的,因此你可以用JPEGsnoop、MagicEXIF等软件来检测MakerNote 的类型,从而比较它是否与IFD0中的“生产商”一致。

关于原图检测的最后一个重磅武器是检测图像的压缩特征。压缩特征是指图像编码的时候留下的独有的特征,不同的机器和软件留下的特征都是不同的,这个跟EXIF和其他元数据都没有任何关系。据我所知,以前淘宝的对于原图不会检测压缩特征,但是现在淘宝会把这一项加入到机检中,但是如果你确保图像是原图的话,这一项是必不可少的。常用来比对压缩特征的软件是JPEGsnoop,打开一张图拉倒最后后,你就会看到它自动反馈的结果,一般结果为 Class 3 的话就说明该图压缩特征与数据库吻合。淘宝检测压缩特征的时候,主要不是看压缩特征与相机原始特征匹配不匹配,而是看是不是由Photoshop生成的压缩特征。


可以用JPEGsnoop对照片的元数据进行检测,也可以用MagicEXIF 1.06版本的内置检测功能,使用方法很简单,打开一张图后,如果软件右下角有红色的“非原始图像”的提示,说明exif被修改过,当然用MagicEXIF也可以自动修复这些被篡改的数据。

<img src="https://pic4.zhimg.com/662412d41e2baacb3a4a16ce89f668ef_b.jpg" data-rawwidth="901" data-rawheight="511" class="origin_image zh-lightbox-thumb" width="901" data-original="https://pic4.zhimg.com/662412d41e2baacb3a4a16ce89f668ef_r.jpg">
点击红色按钮可以详细查看被修改过的地方:
<img src="https://pic1.zhimg.com/b70f6c0ac14694e0545dd583d38df1c0_b.jpg" data-rawwidth="429" data-rawheight="389" class="origin_image zh-lightbox-thumb" width="429" data-original="https://pic1.zhimg.com/b70f6c0ac14694e0545dd583d38df1c0_r.jpg">


为什么Exif信息修改/删除有痕迹?
EXIF信息修改后之所以会留下痕迹是因为经过软件重新编码后的EXIF数据段与原始不太相同了。

其实每个厂商的EXIF编码都有自己的特征的,比如尼康的EXIF有固定长度、索尼的EXIF在文本型数据的偏移量后还会多出一个NULL字节等等等等,这些小特征一般EXIF修改软件(比如opanda powerexif、exifdateeditor等)都不会注意,所以重新保存后的图就会丢失这些特定厂商、或者特定固件、特定型号才有的编码风格。

此外,很多软件因为无法读取EXIF中的“厂商注释”数据(即由厂商自己定义、不对外公布、不受EXIF标准限制的数据),更无法正确重新编码,导致保存后的图像的这部分数据丢失或者损坏,厂商注释数据的完整性便成为了判断照片有没有被修改的重要标准。

当然也有小部分专门的软件比较强大可以兼顾以上的特征的,比如MagicEXIF编辑器,会最大限度按照原始图进行保存,这些小特征保存后不会丢失~

如何删除手机照片的隐私数据(EXIF元数据)?

手机会暴露你的很多隐私,包括用手机拍摄的照片,能够暴露你意想不到多的信息。从手机型号、操作系统版本、拍摄时间、地点(经纬度坐标)、海拔等等,都一一被记录了下来。

如果您在发出这种原始数码照片的时候,未经过处理,那么很有可能就暴露了您的隐私。尤其对于一些爱自拍的女孩,如何清除手机照片里面记录的坐标、手机型号等隐私内容,尤为重要。

下面就介绍一下如何删除手机照片的EXIF信息:

1、首先将手机照片倒出到电脑;

2、在Windows系统里面操作非常简单,鼠标右键单击数码照片文件,选择“属性”;


照片属性可以看到部分EXIF信息


其他看图软件也能读取EXIF信息

3、然后在属性界面点击“详细信息”,里面就可以看到部分的EXIF信息。其实有太多太多的信息这里没有显示出来,比如坐标信息。


采用专业软件可以获取更多的EXIF信息

4、点击“删除属性和个人信息”链接,并选择“创建不包含任何可删除属性的副本”,这样就可以把EXIF元数据给删除掉了。不过最好使用专业的清除EXIF工具,清理的更彻底。

图片Exif信息的更多相关文章

  1. Android 图片Exif信息相关的获取与修改

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

  2. Android--操作图片Exif信息

    前言 在Android系统中,图片文件在内存中以像素点的二维数组加载,存放像素信息,还会在开头加上一些额外的照片拍摄参数信息,这些信息就是Exif.Android2.0之后,媒体库加入了操作图片Exi ...

  3. Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息

    1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...

  4. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解

    [图片引用方向纠正]直接在图片后面添加 ?imageMogr/auto-orient eg:http://data.upfitapp.com/data/2016/10/18/1629114767606 ...

  5. 图片Exif 信息中Orientation的理解和对此的处理

    这个问题是在用七牛上传图片后获取宽高时发现的,一张图片,用图片浏览器打开始终是竖图,但是查看属性或者用七牛获取宽高,却发现宽大于高,也就是在属性中这是个横图.这样导致客户端用该宽高来展示图片会出现问题 ...

  6. Android 获取图片exif信息

    使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  7. 七牛:关于图片 EXIF 信息中旋转参数 Orientation 的理解

    EXIF(Exchangeable Image File)是 “可交换图像文件” 的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息,简单来说,Ex ...

  8. 改动图片exif信息

    我们先了解一下EXIF: EXIF能够附加于JPEG.TIFF.RIFF等文件之中.为其添加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本号信息. 全部的JPEG文件以字符串"0xF ...

  9. Java读取图片exif信息实现图片方向自动纠正

    起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...

随机推荐

  1. Linux下TC使用说明

    Linux下TC使用说明   一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. ...

  2. fix eclipse gc overhead limit exceeded in mac

    fix eclipse gc overhead limit exceeded: 在mac上找不到eclipse.ini文件编辑内存限制,在eclipse安装目录右击eclipse程序,选“显示包内容” ...

  3. mysql innoDB 与 myISAM

    转载文章 出处  http://www.pureweber.com/article/myisam-vs-innodb/ 使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都 ...

  4. (spring-第2回【IoC基础篇】)Spring的Schema,基于XML的配置

    要深入了解Spring机制,首先需要知道Spring是怎样在IoC容器中装配Bean的.而了解这一点的前提是,要搞清楚Spring基于Schema的Xml配置方案. 在深入了解之前,必须要先明白几个标 ...

  5. 关于binary search的一点解惑

    在写binary search时对于mid的计算我最开始使用的是 mid = (low + high)/2; 后来看到在很多的实现为 mid = low + (high - low)/2; 想了一下两 ...

  6. 子线程简单实现(ZT)

    4.0以后的android在主线程中不可以直接访问网络,就得用以下的方法来搞,嘿嘿 在主函数中发送一个空的消息 : new Thread(){ @Override public void run()  ...

  7. ++index 与 index++

    摘自:C++标准程序库

  8. 【Tsinghua OJ】隧道(Tunel)问题

    描述 现有一条单向单车道隧道,每一辆车从隧道的一端驶入,另一端驶出,不允许超车 该隧道对车辆的高度有一定限制,在任意时刻,管理员希望知道此时隧道中最高车辆的高度是多少 现在请你维护这条隧道的车辆进出记 ...

  9. UI基础:DataPersistent.沙盒

    沙盒是系统为每一个应用程序生成的一个特定文件夹,文件夹的名字由一个十六进制数据组成,每一个应用程序的沙盒文件名都是不一样的,是由系统随机生成的. 沙盒主目录: NSString *homePath = ...

  10. JS手机定位地理位置

    /** * 以下为html5代码,获取地理位置 */ /** * 设置地址 */ function setAddress(json) { var position = document.getElem ...