微信发「原图」到底会不会暴露住址?我把 6 个平台的图片元数据全扒了一遍
前年秋天我朋友在闲鱼卖一辆二手公路车。傍晚在小区楼下随手拍了张,车靠着花坛,背景是单元楼号。挂上去不到两小时,有人留言:兄弟你这小区是不是 X 区 X 栋,我住 3 栋,明天顺路来看看车。
他当时给我打电话,声音都是飘的。我让他把发出去的那张图再传我一份,exiftool 一跑,GPSPosition 那一行就躺在那儿:31° 14′ 22.31″ N, 121° 28′ 05.17″ E。秒的小数点后两位,粗算误差不到 15 米,楼号都不用猜了。
他把图删了重发,这次是从微信聊天记录里存的图。我再跑一遍——位置没了,相机型号没了,字段只剩三个:ImageWidth、ImageHeight、Orientation。
同一张照片,两次发布,元数据的差别就这么大。所以这篇我想把这事讲透一点,包括那些教你「一键清 EXIF」的工具为什么可能没清干净。
一、EXIF 不是「可能有点信息」,它是 64KB 的抽屉
JPG 文件开头是 FFD8,紧接着是各种 marker 段。APP1(FFE1)这个段就是装 EXIF 的,长度字段占 2 个字节,所以理论上限 65535 字节。去掉固定头,实际能塞进去 60KB 出头。
这点空间能装的东西,超出大多数人想象:
- DateTimeOriginal:精确到秒。半夜拍的图,第二天早上发,时间戳不会变。
- Make / Model / LensModel:iPhone 15 Pro 会写成 iPhone 15 Pro back triple camera 6.765mm f/1.78,连用的是哪颗镜头都分得出来。
- 曝光三件套:FNumber、ExposureTime、ISO。ISO 6400 说明当时挺暗的,室内还是室外,懂行的人一眼能推。
- GPSLatitude / GPSLongitude / GPSAltitude:高度也存。住 6 楼还是 26 楼,能推出来。
- Software:修图软件和版本。Photoshop 24.1 和 Capture One 16.2 留下的东西不一样。
- Orientation:这玩意儿被删掉之后,很多老看图软件会把竖拍的图横过来显示。这是删元数据的一个副作用,后面讲。
- IFD1:一张内嵌缩略图。这是最大的坑。
还有 MakerNote,厂商自己定义的私有区,索尼、佳能、尼康在里面各塞各的。二手相机看快门数就从这里扒——不过不是每台都行,我手上这台索尼用 exiftool 能直接读出 ShutterCount,朋友那台佳能 6D 就怎么都读不出来,最后靠专门的软件才看到。
顺便说个反直觉的:截图几乎没有 EXIF。iPhone 截图只有几条基础字段,没有 GPS,也不带拍摄参数。所以那些「不小心截图了位置」的说法,基本可以划掉了,截图泄不了位置。
二、6 个平台实测
先说清楚前提:我测的时候是 iPhone 15 Pro 拍的一张原图,带完整 GPS 和高度,微信 8.0.4x、微博 14.x、小红书 8.x、Telegram 10.x。平台策略随时会改,结论只作参考,但你自己按第三节的方法,十分钟就能复现。
- 微信聊天,勾「原图」发送:完整保留,GPS 在。微信自己会弹一句提示,「原图将包含拍摄信息」——这句话是真的,不是吓唬你。
- 微信聊天,不勾原图:重新编码压缩,EXIF 基本清空,只剩尺寸和方向。长边压到 1280 左右。
- 微信朋友圈:压缩加剥离。我这张只剩三个字段。
- 微博:剥离。压缩比微信还狠一点。
- 小红书:剥离。
- Telegram,用「文件」方式发:完整保留。用「照片」方式发:压缩加剥离。
- 邮件附件:完整保留。所以别以为发邮件就安全了。
- iMessage 直接发:保留原图。
规律很简单——平台只要对你上传的图做过一次重新编码,EXIF 就没了;凡是走「原文件传输」的通道,元数据全在。
这个规律反过来也成立:如果你收到一张图,元数据干干净净只剩尺寸,说明它至少被重新编码过一次,你看到的画质已经被动过手脚了。
我想说的一个观点是:EXIF 删不删,从来不是隐私问题,是传输模式问题。同一个 App 里勾不勾一个按钮,结果差 60KB 的信息。绝大多数人以为自己「发了张图」,其实是在两种完全不同的协议里做了一次选择,而那个选择对你来说几乎没有任何提示。
三、删了 EXIF,不等于删干净
这是最容易翻车的地方,也是我比较晚才知道的。
JPEG 的 EXIF 结构里有两个 IFD:主图的 IFD0,和缩略图的 IFD1。IFD1 指向一张内嵌的内嵌 JPEG 缩略图,通常是 160×120,或者长边 160 像素。
问题来了:很多批量「去元数据」的工具,只清掉了主 IFD 里的 GPS 字段,内嵌缩略图还在。而缩略图本身可能带着它自己的一份元数据,甚至就是压缩前的原图。
你可以在电脑上跑这一行验证:
exiftool -b -ThumbnailImage 照片.jpg > thumb.jpg
如果这条命令吐出来一个 thumb.jpg,说明你的图里确实藏着一张你看不见的小图。打开看看——有些平台压缩主图的时候把缩略图留下了,那张小图是压缩前的版本。
除此之外,还有几个常被忽略的容器:
- PNG 的 tEXt / iTXt / zTXt 块。文本随便塞。chunk 长度字段 4 字节,理论上能塞 4GB。
- XMP 包。可以塞编辑历史、关键词、人脸标记。
- ICC 色彩配置文件。删了它有些图会偏色,因为原本是 Display P3 拍的,被按 sRGB 解释了。
- JPEG 文件尾部。JPEG 的结束标记是 FFD9,如果 FFD9 之后还有数据,就是被追加了东西。有人用这招做「图种」,一张图改后缀名解压出压缩包,就是这么来的。检查方法很简单,用 HxD 打开看最后几个字节,或者跑
exiftool -a -G1 -s 照片.jpg,看有没有异常的尾部数据。
四、换个思路:判断图是不是 AI 生成的,别看像素,看容器
网上教「识别 AI 图」的文章,基本都在讲手指、牙齿、背景里飘着的文字。这些东西三个月就过时了,模型迭代一次全修好。
我自己的习惯是反过来的:先不看画面,先看容器。
Stable Diffusion 的 WebUI 出图默认是 PNG,它会把生成参数写进 PNG 的 tEXt 块,字段名叫 parameters,内容长这样:
a photo of ..., Negative prompt: ..., Steps: 28, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 3847561029, Size: 512x768, Model: ...
一条命令就能揪出来:
exiftool -PNG:text:all 图.png
ComfyUI 走的是不同的键,一般在 workflow 和 prompt 两个 JSON 里,里面是整个节点图,连用了哪个 LoRA、权重多少都写得清清楚楚。
但要注意,这招只对「原生导出」的图有效。图一旦经过微信、微博、小红书转一圈,PNG 会被转成 JPEG 重新编码,tEXt 块连影子都没了。所以它能证明「是 AI 生成的」,没法证明「不是」。
这里我又想多说一句:图片的「真实性」从来不在像素里,在容器里。你看到的 100 万像素是给人眼看的,剩下的那 60KB 是给机器看的。而人眼和机器读到的东西,经常不是一回事——现在做鉴定的路子基本都往后者走了,因为前者太容易被骗。
五、动手:查看、删除、保留三套命令
先装 exiftool:
- Windows:官网下载 zip 包,把 exiftool(-k).exe 重命名成 exiftool.exe,丢到 C:\Windows 下,CMD 里就能直接调。不想动系统目录就放一个文件夹里,把那个文件夹加到 PATH。
- Mac:
brew install exiftool - Linux:
sudo apt install libimage-exiftool-perl - 手机:iOS 越狱太麻烦,实际上系统自带的照片 App 分享时就有「包含位置」开关,安卓用 Scrambled Exif 这类。手机上批量处理还是算了。
查看全部:
exiftool -a -G1 -s 照片.jpg
-a 显示重复标签,-G1 按组分类,-s 显示标签真名而不是描述。三个一起用才看得全。
只看位置:
exiftool -GPSPosition -n 照片.jpg
-n 是输出原始数值,不加它会输出 31 deg 14' 这种格式,粘到地图里麻烦。拿到 31.xxxxx, 121.xxxxx 直接扔高德或者 Google Maps 搜索框。
删掉 GPS 但保留版权信息:
exiftool -gps:all= -Artist=张三 -overwrite_original 照片.jpg
全删:
exiftool -all= -overwrite_original 照片.jpg
几个坑,踩过才知道:
- 不加
-overwrite_original,exiftool 会留一个照片.jpg_original备份文件。三张图还好,三百张就乱了。 - 加
-P可以保留文件修改时间。不加的话改完元数据,文件日期全变今天,按时间排序的照片就全乱套。 -all=会把 Orientation 也删掉。删之前最好确认你的看图软件不吃这个字段,否则竖拍照片会躺下。- HEIC 文件 exiftool 也能处理,但 Windows 不装 HEVC 扩展连预览都预览不了,更别说检查了。想省事就在 iPhone 设置里把相机格式改成「兼容性最高」,拍出来直接是 JPEG。
六、我现在是怎么做的
说实话,大部分时候我懒得管。日常发群里的图,微信自动帮我压了,横竖也没人闲到去扒我的群聊图。
但有两种情况我一定过一遍:
一是任何带地理位置背景的照片,往外发之前先跑一遍 -gps:all=。不是怕被人查到,是这个成本太低了——一行命令的事,一次不做可能就要搬家。
二是给别人发的「原文件」。你要发原图,就把原图该有的东西一起担着,文件名、EXIF、内嵌缩略图,一个不落全交出去。这话听着像废话,但就是因为大家都觉得「发张图而已」,那哥们儿的楼号才会出现在闲鱼评论里。
还有个小事:我现在手机相册里存了一份 exiftool 的命令备忘,删图之前先复制粘贴跑一遍。用了快一年,删过大概两千多张图的元数据,中间踩过一次坑——有一次批量删完,发现所有照片的文件日期全变成当天了,三百多张旅行照的排序全乱。后来才知道要加 -P。
差不多就这些。工具就一个 exiftool,常用命令不超过十条,花二十分钟摸一遍,比看十篇「隐私保护指南」管用。