发出去的图里到底藏了多少信息?我拿exiftool翻了自己三年的照片,说点实在的

关键词:图片EXIF信息,图片元数据查看,exiftool教程,微信图片压缩,图片ELA分析

摘要:从一张租房照片里扒出拍摄时间和机型开始,聊聊图片元数据到底是什么、平台压缩会剥掉哪一层、以及用什么工具、什么命令能查能删,顺带说说ELA分析为什么不能当铁证。

上周帮表姐看一套房源照片,她问我能不能判断是不是实拍。我不懂房产,但顺手把图片拖到电脑上右键点了一下属性,再进详细信息——拍摄时间、相机型号、ISO 全挂在那。那是台挺老的三星机器拍的,时间戳是两年前的三月。表姐当时就没说话。这张图附带的信息,比画面本身说得多。

图片

所以这篇不讲构图不讲调色,只讲图片文件里那些你看不见的东西,以及普通人到底该怎么处理。

EXIF 到底塞了多少东西

图片里能挂的信息比大多数人想象的多。最主要的一块叫 EXIF,Exchangeable image file format,1995 年由日本电子工业发展协会搞出来,后来交给 CIPA 维护。这个标准开放的标签大概两百多个,日常相机会实际写入的有一百来个,你在系统文件属性里看到的只是零头。

拿一张 iPhone 直出的 HEIC 举例,里面通常有这么几组:设备组(Make=Apple,Model=iPhone 15 Pro,LensModel 写着一长串 6.765mm f/1.78)、曝光组(FNumber=1.78,ExposureTime=1/120,ISO=64,FocalLength=6.765mm)、时间组(DateTimeOriginal 精确到秒,还带一个 OffsetTimeOriginal 记时区)、GPS 组(GPSLatitude、GPSLongitude、GPSAltitude,海拔精度能到米级)。另外还有 XMP 和 IPTC 两块,XMP 是 Adobe 推的那套,IPTC 是老新闻图片行业用的,手机基本不写,但单反和专业修图软件会写。

图片

真正值得警惕的是 GPS。很多人以为关了定位服务就没事了,其实要看相机那个开关——iOS 那边在设置→隐私与安全性→定位服务→相机里,默认是开的。开着的时候,你在家拍的任何一张原图都带经纬度,误差通常 5 到 15 米。

发出去之后信息开始掉

图片一旦经过平台,元数据就开始流失。微信是最典型的例子。不勾选原图的普通发送,图片会被重新编码:长边压到 1280 像素左右,文件体积从原来的三四兆掉到 200KB 上下,JPEG 质量因子我估计在 70 到 75 这个区间。这个过程里 GPS 基本全没了,XMP 没了,ICC 色彩配置被统一换成 sRGB,Display P3 的广色域直接丢掉。拍摄时间有时候留有时候不留,这个跟版本和系统有关,不好一概而论,我自己在不同安卓机上试过几次,结果并不一致。

微博、小红书也是二次编码,小红书压得更狠一些,还会统一加水印、裁掉一部分边缘,长边一般不超过 1080 到 1440。有一种情况是例外:Telegram 里选“作为文件”发送,图片原样传,一个字节不改,EXIF 全在。所以如果你真想给谁一张原始图,别用图片方式发,用文件方式。

图片

这里插一句,很多人以为“保存到手机”之后图片就还原了,其实那只是相册重新写了一个保存时间进去,原来的字段早没了。

查元数据的几个办法和具体命令

最省事的办法其实不装软件。Windows 上右键→属性→详细信息,能看到相机型号、光圈、ISO、尺寸、拍摄日期这几项。macOS 是打开预览→工具→显示检查器,快捷键 ⌘I,信息更全,有 GPS 的话它会直接在地图上点出来。

要看全,就得用 ExifTool。这是 Phil Harvey 写的一个 Perl 脚本,命令行工具,免费开源,2003 年就有了,到现在还在更新。Windows 版下载下来是个 zip,解压出来那个文件叫 exiftool(-k).exe,必须把括号和 -k 去掉、改成 exiftool.exe,否则每次跑完它都停在那等你按键。把它扔进 C:\Windows 目录就能全局调用,或者把所在目录加进 PATH 环境变量。

图片

常用命令就这几条,抄下来够用很久:

exiftool 图片.jpg —— 看主要信息 exiftool -a -G1 -s 图片.jpg —— 全部字段,按来源分组,显示原始标签名 exiftool -gps:all 图片.jpg —— 只看 GPS exiftool -csv -r D:\照片 > meta.csv —— 整个文件夹批量导出 CSV,Excel 打开 exiftool -all= 图片.jpg —— 删除所有元数据

注意 -all= 是原地覆盖,但它会顺手生成一个 图片.jpg_original 备份文件,用完记得自己删掉,不然文件夹会越来越乱。批量的话在目录里敲 exiftool -all= *.jpg 就行,千万别在系统目录瞎跑。

图片

不想碰命令行的,exif.regex.info(Jeffrey's Exif Viewer)够用,直接拖图,会在地图上标出 GPS 位置,还会给一句“这张图可能被编辑过”的提示。另外 29a.ch 那个 forensically 功能更多,但它的 ELA 结果要小心解读,下面单独说。

ELA 分析为什么不能当成铁证

ELA 是 Error Level Analysis 的缩写,原理是把图片按已知质量重新保存一次,然后做像素级差值,差值大的区域说明原始压缩痕迹不一致。听起来很科学,坑却不少。JPEG 是 8×8 分块压缩的,块的边缘本来误差就大;经过社交平台二次压缩的图,ELA 出来一团糊,什么也判断不了;同一张图上天空和树叶的压缩残留本身就完全不同。

所以 FotoForensics 上某个地方红一块,不等于那里被 P 过,很多新手就是被这个吓到的。真要判断一张图动没动过,更靠谱的路子是看这几处:缩略图(ThumbnailImage)跟主图内容对不对得上——Photoshop 保存的 JPEG 经常留一张和主图不一致的缩略图;看量化表是不是相机原生那一套;看有没有 8BIM 这种 Photoshop 资源块残留;看 Software 字段,直接写着 Adobe Photoshop 的虽然少见,但确实存在,也有人会专门清掉。

图片

还有一层是隐写,这个日常基本遇不到,CTF 比赛里倒是常见。最经典的是 LSB,把信息塞进每个像素 RGB 三个通道的最低位,只改动 1 个色阶,肉眼绝对看不出来。一张 1920×1080 的 PNG,理论容量是 1920×1080×3÷8,大概 777KB,塞个文档绰绰有余。PNG 本身还有 tEXt、iTXt、zTXt 三个块,本来设计是给作者留备注的,能写文字也能塞 base64。想挖这些得用 zsteg 或者 StegSolve,普通用户不用管。

我个人的处理习惯

发二手、租房、交友这类图之前,我一定会先过一遍。iOS 分享前可以点“选项”关掉位置信息,或者干脆先用 exiftool -all= 清一遍再发。但是别养成逢图必删的习惯——把照片发给修图师,对方需要看白平衡和曝光参数;做图库的,平台靠 EXIF 做版权溯源;拍长期项目的,时间戳是重要的存档依据。全清掉不一定是好事。

我自己的判断是,这事被说得有点妖魔化了。绝大多数人发出去的图,早被平台压过一遍,能扒出来的东西没那么多;真正需要防的就那么几个场景——发原图、发文件、发相册里的原始文件。反过来,懂点元数据对普通人最大的用处不是防身,是省事。去年我卖一台二手镜头,买家让我发原图,我自己先跑了一遍 exiftool,拍摄时间三年前,机身型号和我描述的对得上,价格谈得挺痛快。信息摆在那,双方都省心。

标签: