图片信息到底藏了什么?EXIF、GPS、拍摄参数三层拆解,附6个查看和清理工具的实测
起因:一张原图,把我表弟家的小区名送了出去
去年夏天我表弟在二手平台挂了一支旧镜头,为了让人看清镜身划痕,他没压缩,直接传了手机拍的原始 JPEG。第三天有人私信他,开口就说出了他住哪个小区。他一开始以为是熟人,聊了几句才反应过来——对方是纯陌生人,凭的就是那张照片自带的 GPS 坐标。
他把照片甩给我。我用 ExifTool 跑了一下,输出里 GPS Latitude 那一行是度分秒写法,大概是 31 deg 13' 47.62 这种格式,换算成十进制度以后,和我表弟家楼下那家便利店差不到 30 米。这份精度不是摄像头本身的锅,是手机拍照时同时向系统要了 GPS 定位,顺手把结果写进了 JPEG 的 APP1 段。
那次之后我才发现,我虽然天天跟图片打交道,但对图片信息这四个字理解得很浅。网上一搜,十篇有九篇在教你怎么删 EXIF,可删 EXIF 只是最表面的一层活儿。
我自己总结的三层模型:像素层 / 元数据层 / 语义层
我把一张照片包含的信息分成三层。这套分法不是什么标准定义,是我自己画草图时顺出来的,但用起来挺顺手。
第一层,像素层。 一张 4000×3000 的手机照片有 1200 万个像素点,每个点 RGB 各 8 bit,原始数据大约 1200 万×3 字节,也就是 34.3 MB,压成 JPEG 之后通常剩 3 到 5 MB。这层不写坐标、不写机型,但它老老实实记下了你拍了什么:窗外的招牌、停在楼下的车牌、工牌上的名字、显示器上一整页没关的文档。我见过有人发工位照,画面右下角反光的屏幕里,能读出一份内部排期表的标题和三个日期。
第二层,元数据层。 EXIF、IPTC、XMP 都住在这层。我用 ExifTool 12.76 读一张 iPhone 15 Pro 拍的 HEIC,能吐出来 200 多个字段:拍摄时间精确到毫秒、机型、镜头型号、光圈 f/1.78、快门 1/120 s、ISO 64、等效焦距 24 mm,再往下是 GPS 经纬度、海拔、当时移动速度、镜头朝向。厂商还会塞私货,比如佳能机身的 ShutterCount(快门次数),很多人出二手相机时忘了这行数字会出卖真实快门数——买家拿它跟卖家口述的数字一对,差个几万次就尴尬了。
第三层,语义层。 这层删不掉,也没法用工具清理。AI 现在扫一眼像素就能推断:大概在哪个纬度拍的(看植被类型、光照角度、建筑风格)、招牌上写的是哪国文字、拍摄者大概什么身高(靠透视和视角)。GeoGuessr 上那帮人靠一棵树的品种就能锁定国家,用的就是这层功夫。第二层是写死的数字,第三层是算出来的推论,后者永远比前者更难防。
三层里,最难处理的是第一层和第三层,最容易处理的偏偏是第二层,也就是所有人都在讲的那一层。这个错位,我觉得是现在讨论图片隐私时最大的误区。
查和清:工具清单 + 不同平台的行为差别
先说查看。桌面端我首选 ExifTool,命令行虽然反人类,但字段最全:exiftool -a -u -g1 文件名 会把所有组、所有字段全列出来,包括那堆藏起来的厂商私有标签。不想碰命令行,Windows 右键属性再点详细信息能看到常用字段;macOS 在预览里按 Cmd+I 打开显示检查器也行,但这两个方式都显示不全,尤其看不到 GPS 之外的那些。网页端我常用 Jeffrey's Exif Viewer,可以只上传元数据做预览,不用把整张图交出去。
按场景再细分一下:批量排查,比如要发几百张图,用 ExifTool,一条 exiftool -r -csv . > meta.csv 把整个文件夹的元数据导成表格;单张精查想确认有没有藏坐标,macOS 预览配网页查看器对照着看;验证清理效果,清理完再跑一次 ExifTool,数还剩几个字段。
清理这块有个坑,不同平台的默认行为完全不一样。我拿安卓和 iOS 各一台机器在 2024 年下半年试过一轮,大致印象是:微信里发普通图片会二次压缩,长边一般压到 1280 px 左右,文件体积掉到 100 到 300 KB,元数据基本被剥干净;发原图时保留的字段会多一些,但 GPS 这类敏感字段各家版本的策略并不统一,最靠谱的做法还是自己用 ExifTool 验一遍。
至于邮件附件、U 盘、网盘直传,默认全都是原样搬运,EXIF 一个字节不动。所以真正危险的反而不是社交平台,是那些你以为是私密通道、结果什么都没处理的地方。我自己踩过一次:用邮件给客户发原片,顺手把带 GPS 的版本发过去了,好在是熟人,提醒我删掉重发。
清理工具我自己在用的几个:
- ExifTool:
exiftool -all= -overwrite_original 文件名,注意-all=会连色彩配置文件一起清掉,如果在意色准,改用-gps:all=这种精准清理; - ImageOptim(macOS):图形界面,勾上 Strip EXIF 就行,但处理 PNG 时要留意,tEXt 和 tIME 块是另一套机制,不一定会被一起清掉;
- jpegoptim:命令行,
--strip-all一把梭,适合批处理; - Lightroom:导出时在元数据一栏选移出全部元数据,但这一步做完原图别留在同目录,不然等于没做。
我的一点私见:别指望工具,指望分层习惯
我最后想说的可能有点扫兴:清理元数据这件事,防的是第二层,而第二层恰恰是三层里危害最小的一层。一个 GPS 坐标能定位到你家小区,但一张窗外的照片,人能看出你住几楼;一张随手拍的办公桌,AI 能读出屏幕上的项目代号。这两件事,ExifTool 一个都帮不了你。
所以我现在的习惯是按用途分层处理:要发公开平台的图,先想清楚这张图里有没有不该出现的东西,再谈清不清 EXIF;发给客户或者同事的工作图,保留拍摄参数反而有用,方便对方对色彩和曝光;只有关系到住址、证件、工牌这类,我会直接裁掉对应区域,不是打码,是裁掉,打码在某些算法下能被还原,裁剪不会。
回到开头我表弟那件事。他后来做的事其实很简单:把那张照片重新拍了一遍,在系统设置里关掉相机应用的定位权限,拍完再用 ExifTool 确认 GPS 字段为空。整个过程不到五分钟。但这五分钟之前,他需要先知道有 GPS 这回事——这就是我写这篇的原因。