什么是 EXIF?

前言

身边一位朋友不知道什么是 EXIF,遂有了本博客

PixPin_2024-10-02_17-46-36

什么是 EXIF?

EXIF 全拼为 Exchangeable image file format,译为可交换图像文件格式,是专门为数码相机的照片设定的文件格式,可以记录数码照片的属性信息和拍摄数据。EXIF 文件实际是 JPEG 文件的一种,遵从 JPEG 标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图

人话:一张图片在包含自身的图片信息外,还会有一些二进制位存储拍摄时间,拍摄地点,拍摄设备,传感器参数等信息

如何查看 EXIF?

手机可以直接查看,如果没有就说明这张照片在拍摄时并没有保存 EXIF 信息,或者这张照片在分享过程中 EXIF 信息被删除掉了(比如微信 QQ 在发送照片时不勾选“发送原图”就会在压缩照片的同时把 EXIF 信息删掉)

Screenrecorder-2024-10-03-09-42-38-363 00_00_00-00_00_30

Windows 直接打开图片属性的详细信息也能查看

除此之外,网上还有很多在线 EXIF 查看器,不一一赘述了

编码格式

所有的 JPEG 文件都以 0xFFD8 开头,以 0xFFD9 结束

image-20241003100519305

0xFFD8 后紧跟的是 0xFFE1 表示该文件带有 EXIF 数据,E1 表示 APP1 区段,通常存储 EXIF 信息。APP1 区段(Application Segment 1)是 JPEG 文件格式中专门为存储应用程序特定数据(例如 EXIF 数据)的部分,它允许将额外的元数据嵌入到 JPEG 图像文件中,而不会影响图像的解码和显示

0xFFE1 紧跟的两字节会表示 APP1 区段的长度。该长度是以 16 进制表示的,总长度包括这两个字节本身

接下来是 45 78 69 66 00 00,它代表字符串 “Exif” 以及两个填充的 0 字节,这是 EXIF 数据区的开始

EXIF 信息区通常采用 TIFF 格式存储。你会在 “Exif” 后面看到 TIFF 头部

IIMM 分别表示字节顺序为小端序或大端序。II 是 Intel 字节序(小端序),MM 是 Motorola 字节序(大端序)

接着是两个字节的常量 00 2A,表示这是一个 TIFF 文件

然后是一个 4 字节的偏移值,指向 TIFF 的第一个图像文件目录(IFD)的位置

IFD 全拼为 Image File Directory,它是一组标签,每个标签包含元数据信息,每个 IFD 项是 12 字节。前两个字节表示标签的 ID,比如 0x010F 表示制造商,接下来的两个字节表示数据类型,再接下来的四个字节表示数据项的长度,最后的四个字节是数据的实际值或指向数据的指针

常见 EXIF 标签

  • 0x010F:制造商
  • 0x0110:型号
  • 0x9003:拍摄时间
  • 0x8827:ISO 速度
  • 0x829A:快门速度
  • 0x829D:光圈

Q & A

分享的照片会不会泄露自己的位置?

大多数 APP 在上传照片的时候已经在对图片进行压缩的同时一并删掉了 EXIF 信息,比如 QQ 空间和朋友圈。但是如果你在聊天框内发送原图,会包含所有的 EXIF 信息

EXIF 信息可信吗?

不可信,是可以随意进行更改的