2019 年我在二手平台卖了台旧相机,配图是顺手拍的客厅。买家加我微信,第一句话是:“你家在 XX 区吧,离我挺近。”
我当时背上一层汗。那张图是我用 iPhone 直接发的“原图”,EXIF 里明明白白写着 GPS 经纬度,精确到米。从那以后,“发图前先跑一遍信息”跟出门摸钥匙一样,成了固定动作。
这几年帮人做图源追溯、也帮几个做电商的朋友排查过图片泄露,我发现绝大多数人对“图片信息”的理解停在两层:要么只知道“能看相机型号”,要么只知道“用 AI 检测器看看是不是生成的”。中间那一大块真正有用的东西,反而没人讲。
先把“图片信息”拆成三层,不然永远在打架
我自己的分法是这样:
像素层——每个像素的 RGB 值、噪声分布、传感器模式噪声(PRNU)、JPEG 的量化表、色度子采样是 4:2:0 还是 4:4:4。这一层最难伪造,因为要重造就得重造整张图,但也最难读,普通人基本用不上。
容器层——EXIF、XMP、IPTC、ICC 色彩配置、C2PA 清单。你右键属性看到的所有东西都在这层。这层最好读,也最不可信,一行命令就能写进去。
语义层——画面内容本身。手指、文字、反光、影子。这层最直观,也最容易骗你。
一张 iPhone 14 Pro 拍的 HEIC 转成 JPEG,ExifTool 一般能读出 60~80 个标准标签;如果算上苹果自己的 MakerNotes,200 条往上。我手上这张室内图,ExifTool 报了 213 条,里面有镜头序列号、HDR 增益图信息、甚至“照片是否是合成”的标记位。(顺便说一句,我 2019 年那台是 iPhone 8,那会儿 iOS 还没有“分享时移除位置”的开关。)
容器层:怎么查,怎么删,以及为什么微信不可信
最省事的三个入口:
Windows:右键 → 属性 → 详细信息。能看到机身、光圈、ISO、焦距。但 GPS 只有“纬度/经度”两个字段,还是度分秒格式,贴进地图软件不认。
macOS:访达里选中文件按 Cmd + I,“更多信息”里有“位置”,点一下直接跳地图。
命令行(推荐):exiftool -a -G1 -s 图片名。-G1 按组显示,一眼能分出 EXIF / XMP / IPTC / Composite 谁是谁;-a 显示重复标签(很多图同一信息存了两遍);-s 显示标签原名,方便你后面写脚本。
只要 GPS:exiftool -GPSLatitude -GPSLongitude -GPSAltitude -n 图片名,-n 输出十进制,可以直接贴进高德或 Google Maps。
批量导出:exiftool -r -csv -GPS* -DateTimeOriginal ./照片 > 结果.csv,我上次拿这个查一批素材,1200 张里 371 张带精确坐标。
删:exiftool -gps:all= -xmp:all= -iptc:all= -overwrite_original 图片名。注意别用 -all=,它会把 ICC 色彩配置一起删掉——我踩过一次,iPhone 拍的 Display P3 图删完之后在 Chrome 里发灰,客户当场问我“你是不是调色了”。
平台这块,我的实测结论是:微博、小红书、X(推特)上传后基本清空 EXIF;Instagram 保留得极少。微信这个我劝你别赌——它不同版本行为不一样,我测过的某几个版本里“原图”仍然带着机身和拍摄时间,只把 GPS 处理掉了。真要保隐私,别指望平台,自己先删。
有个反直觉的:截图会生成全新的 EXIF。截图记录的 Software 是系统版本,没有坐标,但截图的像素尺寸能反推设备——iPhone 15 Pro 的截图是 1179×2556,iPhone 14 是 1170×2532,安卓各家更是五花八门。做图源追溯的时候,这个比什么 AI 检测器都好使。
AI 生成图:元数据比画面靠谱得多
这块是我用得最多的。
Stable Diffusion WebUI(A1111):生成的 PNG 里有个 tEXt 块,key 是 parameters,value 是一整段文本——prompt、Negative prompt、Steps、Sampler、CFG scale、Seed、Size、Model hash,全在里面。用 exiftool -PNG:all xxx.png 直接读,比什么工具都好使。
ComfyUI:更狠,PNG 里塞了 prompt 和 workflow 两个块,workflow 是完整的节点图 JSON,我见过单张图带 780KB 元数据的。所以“一张 1024×1024 的图居然有 3MB”,本身就是信号。
Midjourney:这块变动太快,我不敢给你写死结论。我 2025 年初自己复现的情况是,一部分渠道下载的图会带内容凭证,一部分什么都不带。你要用的话,别听人转述,自己下一张丢进读元数据的工具里跑一遍。
DALL·E 3 / ChatGPT 出的图:带 C2PA,去 contentcredentials.org/verify 上传,能直接看到“由某某生成”。Google 那边的 SynthID 是隐水印,元数据和肉眼都看不见,只能用官方端口验。
还有个不看元数据也能猜的维度——尺寸。SDXL 走的是固定桶:1024×1024、1152×896、1216×832、1344×768、1536×640。SD 1.5 是 512×512 或 512×768。Midjourney v6 出来的尺寸也很特殊。你看到一张“照片”,分辨率刚好是 1344×768,那基本不用往下查了。
顺便泼盆冷水:手指数量、文字是否乱、左右耳环不对称这些 2023 年的老特征,在 2024 年下半年之后的模型上基本失效。现在还拿这个当判据的教程,可以直接关掉。
像素层:ELA 被吹过头了
网上大量教程教你用 ELA(误差水平分析)识破 AI 图。FotoForensics 和 29a.ch/photo-forensics 都是免费能用的,原理是把图按 95% 质量重新压一遍再比差异。
但 ELA 对“整张图都是生成的”是无效的——整图重新编码,误差分布本来就均匀。它真正擅长的是“局部粘贴”:把 A 图的脸贴到 B 图上,那块区域的压缩历史不一样,才会亮起来。我甚至见过 ELA 高亮出来的是微信二次压缩的块效应,跟造假一点关系没有。
像素层里真正硬的是 PRNU,传感器模式噪声,学术圈 2019 年之后有一批方法(比如 Noiseprint)在做这个,版权纠纷和司法鉴定在用,普通人没必要碰。
对普通人来说,性价比最高的“像素层替代方案”是反向图搜的顺序:先 Google Lens 看有没有同款,再 Yandex(场景和人脸匹配最强),然后 TinEye——TinEye 能按“最早出现时间”排序,这直接回答了“这张图是不是老图新炒”。最后百度识图捞中文圈。这套流程走完,多数谣言图的结论比任何 AI 检测器都确定。
我的观点:判断顺序反了,所以你总是被骗
这行最荒谬的地方在于:所有人都在吵“这张图是不是 AI”,但信息分布在三个可靠性完全相反的地方。容器层最好读、最不可信;像素层最难伪造、最难读;语义层最直观、最容易骗你。
所以正确顺序不是先看画面,而是:
- 看尺寸和文件体积,猜来源。
- 看 EXIF 是否自相矛盾——比如 Software 写着 Photoshop,但镜头序列号又齐全;或者 ModifyDate 比 DateTimeOriginal 还早;或者一张“随手拍”的图 ICC 是 Adobe RGB 而不是手机默认的 Display P3。
- 反向搜时间线(TinEye 按时间排)。
- 最后才看画面。
我这一年到第二步就有结论的,大概占八成。用不着 AI 检测器。
可以抄走的四条命令
# 1. 全量读,按组分类
exiftool -a -G1 -s photo.jpg
# 2. 只读 GPS,十进制
exiftool -GPSLatitude -GPSLongitude -GPSAltitude -n photo.jpg
# 3. 删敏感信息,保留 ICC
exiftool -gps:all= -xmp:all= -iptc:all= -overwrite_original photo.jpg
# 4. 读 AI 生成参数(PNG)
exiftool -PNG:all output.png
用 ImageMagick 彻底剥一层:magick in.jpg -strip out.jpg。剥完体积能小 15%~30%,但对广色域图同样会丢 ICC,自己权衡。
最后一句:我上面写的版本和数字,都有时效性。工具会改,平台策略也会改,尤其是微信和 Midjourney。你看到这篇的时候,最好自己拿一张图跑一遍——这行的“最新结论”保质期通常不超过半年。