PicScrub logoPicScrub

工作原理

每一张数码照片装着的,都不只是画面本身。文件里还藏着一些看不见的信息:你当时站在哪里、用的是什么设备、快门在哪一秒按下。这些数据叫做 元数据, 当初是为了帮摄影师整理作品而设计的。可是一旦你把照片发到网上,它就变成了隐私风险。

戴着墨镜的狗的示例照片
GPS: 45.4642° N, 9.1900° E
2019-10-12 12:42:14
Xiaomi Mi 9T
f/1.75 · 1/1179s · ISO 100

大部分社交平台会自动清掉元数据,所以这不总是个问题。但邮件附件、网盘分享链接、论坛和个人网站,往往会原样保留原始文件。如果你希望自己决定分享出去多少信息,那么上传之前先把照片清理一遍是值得的。

你的照片里藏着什么

当你把一张照片拖进首页那个工具时,我们会扫描它的元数据。下面这些是我们通常会找到并清除的内容:

GPS 坐标

精确到几米的经纬度。你住在哪、在哪上班、去过哪,全都写在这里。

← 你家地址!

时间戳

照片拍摄的时刻,精确到秒。你的作息和习惯就这样暴露了。

← 你几点走的

设备信息

相机的品牌、型号、镜头,有时还有序列号。凭这些就能在不同照片之间把你对上号。

← 跨照片认出你

编辑历史

用过的软件、作者姓名、版权声明。由 Photoshop、Lightroom 这类工具写入。

← 你的名字在里面

我们怎么清除它

你使用 PicScrub 的时候,背后发生的事情是这样的:

1

图片始终留在你的设备上

全部处理都在你的浏览器里用 JavaScript 完成。你可以断网试试:工具照样能用。

2

我们先识别格式

每种格式存放元数据的方式都不一样,所以我们对每种格式都用专门的处理方式。

3

像做手术一样精准地摘掉元数据

我们不会重新编码你的图片(那样会损失画质),而是跳过元数据段,只用图像数据重新拼出文件。

4

你下载干净的文件

同一张图,同样的画质,体积更小(元数据往往会占 10-50KB),不带任何隐藏信息。

无损画质

大多数清除元数据的工具都会重新编码图片,每处理一次画质就下降一点。我们换了一条路。

别的工具

重新编码过的图片

画质:约 95%

PicScrub

原始像素

画质:100%

可以这么理解:别的工具是把你的文件整份复印一遍,好把上面的便利贴去掉。我们是小心地把便利贴揭下来,再把原件还给你。

用架构保证隐私

我们说你的图片不会离开设备,这不只是一句承诺,而是这个工具本身的构造方式。没有服务器接收你的照片,也没有什么后台上传,代码就在你的浏览器里跑。

也就是说,我们看不到你的照片,就算想看也看不到。保证隐私的是架构,不是一纸政策。

整个代码库都是开源的。你可以亲自查看图片到底经历了什么,从安全角度审计代码,或者自己把它跑起来。

局限

PicScrub 能应付绝大多数常见场景,但有几个技术上的限制值得提前知道:

HEIC 文件的体积不会变小

HEIC 用的是 ISOBMFF 容器(和 MP4 一样),里面很多内部偏移量都依赖精确的字节位置。删掉字节就会毁掉文件。所以我们改用零去覆盖元数据:敏感数据被彻底摧毁,但文件体积不会变小。

私有 RAW 格式返回的是 JPEG

CR2、NEF、ARW 这类格式没有公开文档,而且各家厂商各搞一套。与其冒着弄坏你文件的风险,我们选择提取里面嵌入的 JPEG 预览图(大多数相机都会存一张全分辨率的),清理这张图。DNG 文件则是完全支持的,因为它用的是有公开文档的 TIFF 结构。

色彩配置文件默认会保留

ICC 色彩配置文件严格来说也算元数据,但删掉它可能导致颜色偏差。所以当图片带有配置文件时,“保留色彩配置文件”选项默认是勾选的;如果你想连它一起删除,取消勾选即可,也可以通过 picscrub 库 的 preserveColorProfile 选项来控制。

自己试一试

拖一张图片进来,看看我们能找出哪些元数据。

立即清除元数据

各种格式的细节

每种图片格式存放元数据的方式都不同。对 JPEG 有效的办法,放到 PNG 或 SVG 上就不管用了。我们为每种格式都准备了详细的指南:

给开发者

PicScrub 也以开源库的形式提供。你可以在自己的项目里使用它,有完整的 TypeScript 支持,也欢迎给代码库贡献代码。