杂记 › 技术笔记 › 「全部清除」后还剩 553 字节,「只去掉位置信息」连缩略图都没动

「全部清除」后还剩 553 字节,「只去掉位置信息」连缩略图都没动

勾了「全部清除」,产物里还剩 553 字节元数据

准备发出去的几张旅行照,我用默认那一档挨个跑了一遍元数据,页面提示省下几千字节。让我停下来的是顺手做的事:把产物再拖回页面读一遍。这一读,ev_exif.jpg 从 7746 字节变 4711 字节、少 3035,EXIF 标签确实归零,内嵌缩略图 0B,XMP 也没了,可元数据合计只从 3588 降到 553。

那 553 拆得开:0xE2 的 ICC 段带 2 字节段头记 447,0xED 的 PSD 段记 106,相加正好 553;16 字节的 0xE0 JFIF 段原样留着,只是没进这个合计。原因也不神秘:默认档的 5 个复选框只勾了 XMP 与 JPEG 注释,Photoshop 图像数据与色彩配置 ICC 都空着,砍的是被勾中的那几段。

后来我改成一件很笨但有用的事:图片EXIF查看与清除跑完拿到产物,就把它再拖回去读一遍。工具不会替我做这步,只回一句省了多少字节,那 553 是我自己重读看到的。

「只去掉位置信息」不是砍段,而是按结构重写

换到第二档,同一张源图从 7746 变 6945 字节、只少 801。页面提示写的是省下 237 B,对不上不是算错:237 只统计被删的位置标签,这一档还会把含位置的 XMP 段整段摘走,那段 562 加 2 字节段头是 564,237 加 564 正好 801。

产物再拖回去读,残留 38 条标签,而源图本来就是 4 组 48 条(ifd0 12、exif 24、gps 10、interop 2)。机身序列号 X100-0012345、镜头序列号 L-987654、96 字节的厂商注释、用户注释、作者、版权全部在,消失的只有 GPS 那 10 条。删不删跟有没有隐私标记无关:48 条里只有 9 条打了 [privacy],GPS 那 10 条反倒不打标记,只在组头挂一句位置信息最敏感建议清除。

同一张源图与两种清除产物,单位字节 源图 7746B 全部清除 4711B 剩 553 只去位置 6945B 剩 38 条

图 1|同一张 ev_exif.jpg 现算两次:默认档砍 3 个连续区间剩 4711,元数据仍 553;位置档只重写结构,少掉的 801 里位置标签占 237。

内嵌缩略图会不会被一起去掉,看两件事

面板那行「EXIF 内嵌缩略图 · 清除 EXIF 会一起去掉」只对默认档成立。能不能切出来有硬条件:0x0201 与 0x0202 同时存在,且 0x0103 的压缩方式等于 6。ev_exif.jpg、ev_exif.png、ev_exif.webp 三个样本都切出 1125 字节、文件头 FF D8 FF E0;ev_nothumb.jpg 照样有 48 条标签,缩略图却是 0B,APP1 只剩 1198 字节,比 ev_exif.jpg 的 2347 少 1149,正好是 1125 加描述它的 2 条 IFD 条目各 12 字节。

位置档跑完,1125 字节仍在:它跟经纬度住在同一个 APP1 里,却不属于位置字段,重写时被原样搬过去。

PNG 与 WebP 走砍块:像素没动,产物却对不上纯删除

默认路径不会重压一遍画质,几个容器都能对齐。ev_exif.png 从 4976 变 1888、少 3088,1729 字节的 IDAT 逐字节相同;重读剩下的块是 IHDR、pHYs、pHYs、gAMA、iCCP、IDAT、IEND,文本块从 3 条清零,元数据从 3148 掉到 60。带透明的 ev_alpha_exif.png 1439 → 207 之后 colorType 仍是 6、hasAlpha 仍是 true。

WebP 多改一处:块表从 VP8、EXIF、XMP、ICCP 变成 VP8、ICCP,2168 字节的 VP8 负载逐字节相同,但产物跟纯删除对不齐,首个失配落在偏移 4 的 RIFF 长度字段上。ev_alpha_exif.webp 1996 → 356 后 VP8X、ALPH、VP8 三块齐全,ALPH 那 48 字节没被动,可重读时 hasAlpha 仍报 false。

样本源文件默认档产物位置档产物重读残留
ev_exif.jpg7746B4711B6945B元数据 553B/38 条标签
ev_exif.png4976B1888B4161B60B,IDAT 1729B 未动
ev_exif.webp5262B2376B4486BICCP 188B 原样留着
ev_anim.gif1396B1023B未测像素区 971B 未动
ev_exif.tif58886B无产物无产物一句该格式暂不支持无损清除
默认档清除后再读到的元数据字节 JPEG 553B ICC 447 WebP 188B 只剩 ICCP PNG 60B iCCP 留着 GIF 0B 注释块与 XMP 块全砍

图 2|同一档跑完留下的东西差很多:JPEG 是 ICC 段 447 加 PSD 段 106,WebP 剩 ICCP 188,PNG 只剩 60,GIF 的注释块 41 与 XMP 块 332 全砍。

同一串坐标有四种写法,标签名还会串位

清之前得先确认读到的是不是位置。摘要行是 31.247667, 121.479133;地图链接直接把原始 double 拼进 URL,#map=16/31.247666666666667/121.47913333333334;度分秒只留秒的 2 位,31°14'51.6" 121°28'44.88";海拔在摘要行是 52.6375,在同一份标签表里成了 52.638;越界警告又是 5 位小数「纬度 199.24767」。一个值四种精度。

更误导的是标签名按 id 全局共用、不分子目录,于是 interop 组被按 GPS 的名字渲染成 0x1 北纬/南纬 = R98 与 0x2 纬度 = 276,真身却是 InteroperabilityIndex 与 InteroperabilityVersion,四个容器都复现。

Q:怎么确认产物真清干净了?

把产物再拖回去读一次。清除阶段不会自己复检,只给一句省了多少字节;位置档跑完再跑一遍,字节仍是 6945 且逐字节相同,第二遍只回一句没有需要清除的内容。

Q:想留参数又想拿掉身份字段,怎么选?

位置档不动机身序列号、镜头序列号 L-987654、96 字节厂商注释、作者与版权,却会把含位置的 XMP 整段摘走;默认档反过来,EXIF 清零但留下没勾的 ICC 与 PSD 共 553 字节。

Q:拖进去没反应,是后缀的问题吗?

只看文件头魔数,后缀与 MIME 都不参与——ev_jpg_named.png 7746 字节被按 JPEG 处理,下载又保留原扩展名,产物是个挂着 .png 的 JPEG 流。TIFF 两种模式都被拒、不产出字节,HEIC 只探盒;超过 40MB 的进不了列表,41951810 字节只超 7470 也被跳过,末尾只汇总一句。

📎 相关文章

后缀决定 MIME:同一份 70 字节 PNG 头改出 18 个后缀、13 种类型和 5 个未知 2026-10-23 转 JPG 时透明被强制填底色:91 个质量档位在 PNG 面前不参与编码 2026-10-23 序号位数只是下限、重名时 (2) 插在后缀之前:批量重命名 2000 个文件的实测口径 2026-10-23 证书指纹实测:1159 字节 DER 与 3 种摘要、4 种写法 2026-10-23 TOTP 口令差 30 秒就换码:±1 期反查能定位偏差,算法却只有 SHA-1 一档 2026-10-23