ByteScope

Remove EXIF

以 byte 為單位切掉 EXIF、GPS、IPTC——不重新編碼,所以像素跟原檔逐位元完全相同。

檔案不會離開你的瀏覽器 — 全部在本機處理。

清除選項

建議用這個。只留下最精簡的 Orientation 標籤,讓檢視器把照片轉成正的;下面的開關有打開的話也會留著色彩描述檔。其他像相機、GPS、拍攝時間、縮圖,全部移除。

把照片拖到這裡

或點一下選檔 — JPEG 和 PNG,幾張都可以

關於這個工具

這裡說的無損有精確、而且可以驗證的意思,所以先講 byte 上發生了什麼。一個 JPEG 是一串 marker segment,中繼資料住在它自己的 segment 裡:APP1 裝 EXIF(相機、時間、GPS),APP13 裝 IPTC 和 Photoshop 區塊,APP2 可能裝 ICC 描述檔。清乾淨的做法就是走過這一串、把帶中繼資料的 segment 丟掉,然後把壓縮過的 scan 資料原封不動抄過去。經過熵編碼的影像資料不會被解碼、不會重新量化、不會重新編碼;它是逐 byte 抄過去的,所以出來的像素跟進去的像素逐位元相同。不是「看起來一樣」。是相同。

幾乎所有其他的中繼資料清除工具做的是反過來的事:把你的 JPEG 解碼,因為整個檔案都被丟掉了所以中繼資料也就沒了,再重新編一張新的出來。那確實會乾淨,代價是每做一次就付掉一代畫質——新的量化疊在舊的量化上、本來就不夠銳的邊緣開始出現區塊,而且產出的檔案常常比原檔還大。清兩次就付兩次。PNG 也是同一套 byte 層級處理:PNG 是一串 chunk,所以 tEXtiTXtzTXteXIf 被丟掉,IDAT 影像資料整段照抄。兩種格式都不重新壓縮。

整個資料夾的照片一次丟進來,一輪跑完,要一張一張下載或整包下載都可以。每個檔案都附上清除前後的中繼資料對照:找到了哪些標籤、清掉了哪些、還剩下什麼——因為「已移除中繼資料」這句話本身你沒辦法查證,而「可以查證」正是這頁存在的全部理由。想從另一條程式路徑再確認一次的話,把清過的檔案丟回 EXIF 檢視器看看。全部在你的瀏覽器裡執行:一個說要保護你照片隱私、但先要你把照片上傳到伺服器的工具,實在很難知道要怎麼信任它。

會在意這件事的理由很無聊也很具體:在你家客廳拍的照片公開貼出去,通常就帶著你家客廳的座標,誤差幾公尺,還附上拍攝時間和那支手機。在二手平台上架一張在家拍的商品照、在興趣社團貼自己的狗、在論壇分享旅遊照——地址就搭在沒人會去讀的欄位裡一起出門,直到有人真的去讀。大平台會重新壓縮上傳的圖,中繼資料算是被順手清掉了;但直接傳檔的路徑不會:email 附件、雲端連結、Discord 和 Telegram 傳檔,任何以「檔案」形式交出去的東西都算。出門前先清一次。

常見問題

移除 EXIF 會不會讓畫質變差?

不會,而且值得把原因講清楚。中繼資料和像素住在檔案的不同地方:JPEG 的像素是經過熵編碼的 scan 資料,PNG 的像素是 IDAT chunk。這個工具兩者都不會交給解碼器——它把它們原樣抄到輸出,只是不寫周圍那些中繼資料 segment。沒有解壓縮,所以沒有重新壓縮,所以根本沒有一代畫質可以掉。輸出會小幾 KB,如果 EXIF 裡還帶著一張嵌入縮圖,那就是小幾百 KB,而每一個像素都跟原來逐位元相同。想自己證明的話,把兩個檔案丟進 binary diff 比一比:動過的 byte 只有那些「描述照片」而不是「就是照片」的 byte。

到底清掉什麼、留下什麼?

清掉:APP1 裡的 EXIF(相機、鏡頭、曝光、DateTimeOriginal、GPS、相機序號)、APP13 裡的 IPTC 與 Photoshop 區塊、XMP、JPEG 的註解 segment,以及跟 EXIF 一起嵌進來的縮圖;PNG 則清掉 tEXtiTXtzTXttIMEeXIf chunk。預設留下:ICC 色彩描述檔(JPEG 的 APP2,PNG 的 iCCP 與色彩相關 chunk)。最後這項是個判斷題,理由是:ICC 描述檔不會透露你是誰、用什麼相機、站在哪裡,但拿掉它會改變照片看起來的樣子——Display P3 的照片被當成 sRGB 畫出來,肉眼就看得出變得比較平。隱私工具不該默默改掉你的顏色。真的想連描述檔一起清,有一個開關給你。

清掉中繼資料之後,照片會不會變成躺著的?

這是唯一一個真正的陷阱,所以這個工具選了邊。手機大多把畫面照感光元件的原始方向存起來,另外加一個 EXIF Orientation 標籤,意思是「顯示的時候請轉過來」。把這個標籤跟其他東西一起清掉,像素還是完好無損,但本來靠這個標籤的看圖軟體就會把照片顯示成橫躺的。真的去旋轉像素可以解決,但那就等於重新編碼,而那正是這頁堅持不做的那件事。所以預設輸出剛好留一個標籤:一個只含 Orientation 的最小 APP1 區塊——沒有相機、沒有時間、沒有 GPS——這對任何看圖軟體要把照片畫正來說都夠了。開嚴格模式的話連這個也清掉,得到一個中繼資料為零的檔案;真的什麼都不想留時再用,並預期有些看圖軟體會把照片顯示成轉過的。對照表會告訴你手上這個檔案屬於哪一種情況,因為 Orientation 本來就是 1 的照片,兩種做法都不會有損失。

哪些格式可以無損清除?

JPEG 和 PNG。這兩個幾乎涵蓋大家真的需要清的東西——相機或手機直出、EXIF 和 GPS 就住在裡面的 .jpg / .jpeg,以及截圖與各種工具匯出的 PNG,那些通常會帶上寫著產生它的軟體名稱的 tEXt chunk。WebP、HEIC、AVIF、TIFF 目前還沒支援,因為要維持同一個承諾,每種容器都得有自己那一套 byte 層級手術;下一個大概會是 WebP 的 RIFF chunk。把這些轉成 JPEG 等於重新編碼,所以這裡不會把它包裝成「清除中繼資料」端給你——如果你要的就是轉檔,圖片轉換器會光明正大做那件事,轉完再回來這裡清也完全沒問題。

我的照片會被上傳到哪裡嗎?

不會。每個檔案都是用 File API 在本機開啟,segment 和 chunk 的手術由你自己這個分頁裡的 JavaScript 執行,清好的檔案是瀏覽器自己產生的下載。這頁是靜態檔案,背後沒有 API,所以連個可以上傳的地方都不存在,把網路關掉也照樣能用。對這個工具來說這不是枝節:你最想清掉 GPS 的那些照片,剛好就是最不想送去不認識的伺服器的那些,而一個要你上傳的清除工具,早就已經收下了你正打算清掉的座標。