这个格式比问题本身还早
GIF 在 1989 年就定稿了,那时数码相机还不是消费品,距离有人制定 EXIF 也还有好些年。它的设计里没有任何部分是用来记录「谁拍的」「在哪拍的」,后来的修订也从未加进去。GIF 装不下相机、镜头、拍摄时间或坐标——不是因为被删掉了,而是因为从来就没有地方放。
那它能装什么
两样东西。注释扩展块装纯文本,编码器有时用它写水印或工具名。应用扩展块装 11 个字节的标识符,后面跟着那个应用想放的任何内容——Netscape 2.0 块就是这样存放让动画循环播放的循环次数的,而某些工具坚持要给 GIF 写 XMP 时,也是从这里塞进去的。
色彩是一张表,不是一份配置文件
GIF 最多挑 256 种颜色,把它们列在一张色彩表里,可以是全局的也可以逐帧的。它没有 ICC 配置文件,也没有地方放,所以同一个文件在两块屏幕上可能看起来不一样,而文件里没有任何东西能纠正这一点。这也解释了照片类 GIF 上那些抖动噪点:图像被硬塞进了这么小的一张表里。
GIF 的结构
- 结构
- 可以存放元数据
- 图像本身
GIF 把东西放在哪里
- 文件头
- GIF87a 或 GIF89a。扩展块只存在于 89a。
- 逻辑屏幕描述符
- 画布尺寸,以及后面是否跟着全局色彩表。
- 全局色彩表
- 整个文件最多 256 种颜色。
- 注释扩展块
- 纯文本。这是 GIF 最接近元数据的东西。
- 应用扩展块
- 一个标识符加它的数据。循环次数在这里,XMP 存在时也在这里。
- 图形控制扩展块
- 帧延时、透明和处置方式。每帧一个。
关于 GIF
GIF 里有 EXIF 或 GPS 数据吗?展开
没有。这个格式没有任何结构能装下它们,从来都没有。如果你想知道一张图会不会暴露行踪,GIF 是唯一一个答案可以提前确定的格式。
那还有什么可检查的?展开
文件结构——画布尺寸、色彩表、帧数和时序——以及编码器可能留下的注释块或应用扩展块。标签表显示的是实际存在的东西,而不是一个空的 EXIF 区块。
为什么清理 GIF 会得到 PNG?展开
因为重编码清理是在画布上重绘图像,而画布只保留一帧,并以 PNG 无损写出。你会得到那一帧的精确像素,但动画不会保留。
GIF 能看出是什么软件做的吗?展开
有时能,通过注释块或应用扩展块。但 GIF 在互联网上流转时被反复重新编码,第一个编码器写下的东西,通常早就被后来的某一个丢掉了。
能做什么
- 删除 EXIF 数据
- 拖入一张照片,下载一份去掉嵌入元数据的副本。JPEG 无损删除 EXIF 段;HEIC、PNG、WebP 等格式通过重编码去除。文件不会上传。
- 删除 GPS 位置
- 先看清照片带着哪组坐标,再下载一份不含坐标的副本。JPEG 只去掉位置标签,其余信息原样保留。文件不会上传。
- 编辑 JPEG EXIF
- 修改 JPEG 的标题、作者、描述、版权、软件和拍摄时间,然后下载编辑后的副本。全部在本地完成,原文件不会被改动。
- XMP、IPTC 与 ICC 查看
- 读取文件携带的每一个元数据分组 —— EXIF、XMP、IPTC、ICC、厂商备注 —— 分组呈现并可导出为 JSON。适用于素材质检、取证和排查处理流程。文件不会上传。
- 打开多张照片
- 一次打开最多五十张照片,看清哪些带有位置信息,并把整批导出成表格。全程不上传,原文件也从不被写入。