雜記 › 技術筆記 › 「全部清除」後還剩 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 也被跳過,末尾只匯總一句。

📎 相關文章

70 個位元組沒動,MIME 類型換了 13 次:副檔名才是唯一輸入 2026-10-23 轉 JPG 時透明被強制填底色:91 個品質檔位在 PNG 面前不參與編碼 2026-10-23 序號位數只是下限、重名時 (2) 插在後綴之前:批次重新命名 2000 個檔案的實測口徑 2026-10-23 兩條憑證指紋一條 95 個字元一條 64 個:差的 31 個全是冒號,摘要物件是整張 DER 2026-10-23 TOTP 口令差 30 秒就換碼:±1 期反查只倒推方向,演算法也只過 SHA-1 一檔 2026-10-23