一张照片为什么不止是一张图画
JPEG 从设计上就会在图像旁边附带一份报告。相机把它知道的东西都写进去:厂商、型号、镜头、曝光、闪光灯有没有闪、精确到亚秒的拍摄时间,以及——如果定位服务开着——经纬度和海拔。这个块叫 EXIF,也正是它,让一张你在次卧拍的照片能告诉陌生人它大概是在哪栋房子里拍的。
有两件事让它比听起来更麻烦。第一,元数据在被编辑器明确去掉之前,是能扛过编辑的:在很多 App 里裁剪一张照片,原来的 GPS 标签还在,仍然指向原图拍摄的地方。第二,有的发布去处会剥掉它,有的不会——大的社交平台通常会,而邮件附件、论坛上传、自己搭的店铺页面和大多数网盘分享链接都不会。所以唯一可靠的规则,就是本页面实现的那条:对着你正要发布的那份文件做决定,看清它里头有什么。
清除到底做了什么
文件是一段一段被重写的。JPEG 是一串带标签的块,所以元数据块可以直接丢掉,完全不碰压缩后的图像数据:量化表、Huffman 表和编码好的扫描数据都逐字节复制过去。没有重新压缩,没有世代损失,外观也没有任何变化——而这一点你可以自己验证,把清除前后的图片比一比就知道,所以这个页面会显示它生成的那份文件的预览,并重新读取它来确认还剩哪些块。
两点必须说清楚的实话。色彩配置文件(ICC)默认保留:它不是身份信息,而删掉它会改变颜色渲染出来的样子,尤其是在默认按 sRGB 处理颜色的浏览器里。如果你还是想去掉它,有一个勾选框,而且去掉之后页面会告诉你你用了它。另外,清除元数据去不掉画面拍进去的东西——一个门牌号、一块街牌、一处倒影。那些得裁掉。
只做 JPEG,是故意的
PNG 把元数据存在 tEXt/iTXt 块里,HEIC 用的又是一套完全不同的盒子结构。要正确处理它们,每种格式都得单独写一个解析器,而一个会悄悄漏掉 GPS 块的半吊子解析器,比没有工具更糟。这个页面就只处理 JPEG,并且明说这一点;如果你需要,隔壁的图片工具可以把其他格式转成 JPEG。