照片中究竟包含了什么

直接打开手机里的一张照片,其实您看到的图片只是文件的一部分。随附在图片周围的是相机在按下快门同一瞬间写入的元数据块:设备品牌和型号、镜头、曝光设置、快门按下的确切时间、操作系统版本,以及(当开启定位服务时)您所站位置的经纬度,精确度通常在几米以内。

这些信息在图像中都是不可见的,但所有信息都会随文件一起传送。将其作为电子邮件附件发送、放入共享文件夹、发布闲置商品信息,所有这些字段都会被一并发送。

上述工具会读取该数据块并在移除任何内容之前将其展示给您,因为那些实实在在的数字最具说服力。仅说“这张照片包含 EXIF 元数据”显得很抽象,但能精确定位到您家大门的坐标对数,却让人无法忽视。

仅剥离数据,不重新编码

移除图像元数据有两种方法,但只有一种是正确的。

比较简单的方法是将图片绘制到 HTML 画布上并再次保存。元数据会因此消失,因为画布根本不承载这些数据。但这种方法会重新压缩图片——在相机的基础之上进行第二次有损的 JPEG 压缩——并丢弃嵌入的色彩配置文件。因此,“清理过”的文件在画质上会明显逊色于原图,并且颜色也会出现偏差。大多数免费的元数据清除工具都是这样运作的,这就是为什么您拿回的文件通常大小不同,且画面也会有细微差异。

本工具则采用了另一种做法。JPEG 是一系列标记段的组合;PNG 是一系列数据块;WebP 则是一个 RIFF 容器。元数据存在于每个特定、可识别的段中——JPEG 中的 APPn 块,PNG 中的 eXIftEXtiTXtzTXttIME 块,WebP 中的 EXIFXMP 块。移除它们的方法就是遍历文件自身的结构,跳过这些块,并将其他所有内容原封不动地复制过来。

在这个过程中,压缩图片从未被解码。这意味着您下载的文件中的图像数据与您提供的文件中的图像数据是逐位(bit-for-bit)一致的——不是“视觉上一致”,不是“高画质”,而是完全相同。这两个文件的唯一区别就在于被剥离出来的元数据。

我们不移除的内容及其原因

有两个元素被特意保留了下来,并配有复选框展示给您,以防您不赞同我们的做法。

色彩配置文件。 ICC 配置文件描述了像素所编码的色彩空间。现代手机拍摄的照片通常具有广色域,如果没有配置文件,广色域照片会被解释为普通的 sRGB,从而导致渲染错误——通常表现为色彩褪色发白,有时也会出现刺眼的色彩。配置文件描述的是图像,而非摄影师,因此默认保留。

旋转标记(当照片需要时)。 手机在您旋转相机拍摄时并不会真正旋转像素;它们会按照传感器感应的方向存储照片,并写入一个简单的 EXIF 数字来说明应该如何旋转显示。移除该数字,清理后的副本在任何遵循该标准的应用程序中都会显示为横向。当某张照片依赖该标记时,本工具会重新生成一个极简的数据块,其中仅包含这一个值,而不含其他任何信息——没有相机型号,没有时间戳,没有位置信息。

您其他照片的安全状况

在发送文件前进行清理解决了在“分享”层面的问题,但对于您相机相册中仍保留的那些照片,这无济于事。它们依然保留着本工具刚刚移除的每一个字段,并且任何有权访问该设备的应用或人都能读取这些信息。

这正是 Vaultine 存在的意义:它是一个加密保险库,文件通过设备本地的 AES-256-GCM 进行锁定,由内置的安全查看器打开而非解密到磁盘上,并且通过图案或 PIN 码解锁而非依赖账号。它与本页面的功能不同——Vaultine 用于存储文件,而不是编辑其元数据——但它们是保护隐私这一理念的两个方面。您分享的照片会泄露您的行踪,而您保存的照片应该被锁定。