两张看起来一模一样的图片,对读取它们的软件来说,可能讲着不同的故事。
一张照片除了画面,还可能携带拍摄时间、相机型号或位置坐标。这些附带信息叫作元数据。它们有助于整理图库,但收到文件的人也可能读到。保护隐私的第一步,是分清一件小事:屏幕上看得见的,不一定就是你发出去的全部。
检查即将发出去的那份文件,而不只是屏幕上的画面。
图片为什么会有一只“信封”
EXIF 是图像文件记录拍摄和处理信息的一种常见方式。根据相机、应用和设置,字段可能包括时间、曝光、设备信息、方向及 GPS 信息。并非所有图片都含有这些字段;某个文件没有 GPS,也不能说明下一张照片同样没有。
元数据很有用。方向信息能帮助查看器正确展示照片,日期能帮助整理回忆;在许多格式中与 EXIF 分开存储的色彩配置文件,则有助于保持颜色表现。目标不是把所有字段都当成危险,而是想清楚某位接收者需要什么,避免无意间把其余信息也一起送出去。
给虚构的风景加上五项虚构信息
我们绘制了一张 900 × 600 的风景图,保存为 JPEG,并写入五个 EXIF 字段:图像描述、相机制造商、相机型号、日期时间和作者。它们都明确是假数据,例如 DUMMY CAMERA、MODEL ZERO 和 FICTIONAL AUTHOR。日期是固定测试值,不记录任何人的活动,也没有加入 GPS 字段。
保存后,我们重新打开 JPEG,读取 EXIF,而不是想当然地认为写入已经成功。五个值都保留了下来。这说明:元数据是文件的一部分,却不一定体现在风景的外观上。无论怎样盯着山峰看,也无法判断作者字段是否存在。

从像素重建,再重新打开
针对这个可控样本,我们先把 JPEG 解码为 RGB 像素,再用像素数组新建图像,保存成 PNG,不继承原来的附加信息字典。得到的是一个新文件。我们保留源文件,没有覆盖它,因此实验可以复查,也可以回到起点。
重新打开导出的文件后,EXIF 条目为零。我们还检查了 PNG 的数据块类型,只发现图像头、图像数据和结束标记。写入的五个文本值在输出字节中也都不存在。这些检查支持的是针对本次生成文件的具体结论,并不是给任何图片颁发“已匿名”的通用证书。
画面在像素层面没有改变
源 JPEG 解码后的 RGB 数组与导出 PNG 完全相同:都是 900 × 600 像素,任一通道的最大差值为零。比较的起点是 JPEG 解码之后。第一次保存为 JPEG 时已经发生过有损压缩,因此我们并没有声称它与压缩前的原始绘图完全一致。
两份文件的 SHA-256 哈希值仍然不同,因为字节、容器格式和元数据都不同。文件指纹变了,不一定意味着可见风景变了;反过来,一张熟悉的缩略图,也不能证明文件没有隐藏信息。画面和文件内容回答的是不同的问题。


清理是一套流程,不是魔法按钮
这里的简单转换适用于这个样本,不代表能处理所有相机文件。真实照片可能需要先应用方向信息,再删除元数据;色彩管理也可能影响结果。其他格式可能带有动画、附加图像、嵌入缩略图或不同的元数据体系。转换还可能让文件变大,或丢失原本想保留的功能。
把原片私下留好,另做一份用于分享的副本,检查外观,再检查剩余信息。即使图片元数据已被清空,文件名、随附消息和服务账户信息仍可能透露背景。把整个分享过程都考虑进去,比只盯着一个复选框更有帮助。
