這個頁面的程式碼沒跑起來。

直接從資料夾裡開啟 index.html,瀏覽器會攔下 JavaScript 模組,於是你選好圖片之後,頁面不會有任何反應。改用 http 把這個資料夾提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然後開啟 http://localhost:8080/。

圖片塗黑與打碼 遮住不該被看到的部分

你遮住的那塊是從檔案裡刪掉的,不是藏在檔案裡。

語言: 繁體中文
檢視原始碼
你的圖片不會上傳。這裡根本沒有伺服器。

解碼、塗改、重新寫出來,全由你自己的瀏覽器完成,用的是它本來就帶的編解碼器。這個工具沒有任何聯網功能,不取東西,也不發東西。這一點在這裡比在本站幾乎任何一頁都更要緊:送進打碼工具的圖片,正是那些姓名、地址、帳號還看得清楚的圖片。

即時檢查: 檢查中…

離線: 檢查中…

別信我們嘴上說的。開啟開發者工具,盯著「網路」面板,塗黑一張截圖試試。沒有一條請求帶走圖片、縮圖、檔名,連你把框放在哪裡都不會。或者乾脆斷網,照塗不誤。

1 選一張圖片

銀行流水的截圖、護照的照片、印著住址的帳單。需要塗黑的圖片,恰恰就是不該為了塗黑而傳給陌生伺服器的那些圖片。這一張由瀏覽器直接從你的硬碟讀進來。

2 遮住不該被看到的部分

在圖片上拖動就能拉出一個框。框可以拖著移動,可以拉把手改大小,也可以按 Tab 選中之後用方向鍵調整:Alt 加方向鍵改大小,Delete 刪掉它。每個框下面顯示的都是真實結果,預覽是寫檔案的那段程式碼按螢幕尺寸畫出來的。

塗黑 整塊一種顏色,從邊到邊。原來那裡的東西什麼都不剩:輪廓不剩,平均值不剩,連有幾個字都不剩。三種裡只有這一種是把話說死的,凡是能讀成文字的都該用它。

打碼 每一格變成那一格的平均色。原來的畫素確實從檔案裡沒了,但一格一格的平均值仍然是對下面內容的一次測量。對於常見字型裡的文字,已經有公開研究靠它還原出了原文。用來遮人群裡的一張臉沒問題,用來遮帳號不行。

模糊 每個畫素變成周圍畫素的加權平均。跟打碼是同一個問題,而且更明顯一些:模糊是一次卷積,卷積原則上可以反過來算。想讓某樣東西柔和一點、而不是藏起來時再用它。

選一張圖片,它就會出現在這裡讓你畫。

3 儲存塗好的那一份

圖片被解碼成畫素,框寫在這些畫素上面,結果再被編碼成一個新檔案。沒有圖層,沒有註解,也沒有任何關於框在哪裡的記錄,因為被遮的畫素在編碼器拿到東西之前就已經不存在了。

格式 這跟塗黑沒關係:編碼器看到它們的時候,那些畫素早就沒了。它只決定圖片其餘部分佔多大、怎麼壓縮。

以 Markdown 檢視

圖片怎麼塗黑,才能讓被遮住的那塊真的沒了

  1. 選一張圖片。截圖、掃描檔或者照片都行,只要瀏覽器打得開。它直接從你的硬碟讀進來,這個過程裡沒有任何東西出去。
  2. 在不該被看到的地方拉一個框。下一處再拉一個。框可以拖著移動,可以拉四周的把手改大小,也可以用 Tab 鍵選中再用方向鍵調整。框下面顯示的就是真實結果,畫它的正是稍後寫檔案的那段程式碼。
  3. 在塗黑、打碼、模糊裡選一個,能選塗黑就選塗黑。塗成一片純色,什麼都不會留下。打碼和模糊只是把畫素換成它們自己的平均值,對付背景裡的人臉夠用,對付任何能讀成文字的東西不夠用。
  4. 按「塗黑並儲存」,然後檢查檔案。之後顯示的那張圖,就是成品檔案被重新解碼出來的樣子。用編輯器開啟找找圖層,或者試著選中被遮住的文字:只有平平的一張圖,你遮住的地方在它被寫出來之前就已經被覆蓋了。

說得更細的版本

圖片怎麼塗黑,才能讓被遮住的那塊真的沒了 大多數軟體畫出來的黑色方塊只是壓在圖片上面,隨手就能挪開。真正的塗黑和只是遮住差在哪裡,打過碼的文字為什麼能被讀回來,以及發出去之前怎麼檢查一個檔案。

常見問題

我的圖片會被上傳到什麼地方嗎?

不會。解碼、塗改、重新寫出來,都由你自己的瀏覽器在你自己的機器上完成。這個工具沒有任何聯網功能,不去取也不去送,頁面的 Content-Security-Policy 寫著它能聯絡的每一個地址,沒有一個是本站的。把頁面載入一次,然後斷網,它照樣能用。

被遮住的那塊,真的從檔案裡沒了嗎?

是的,這個工具就是為這一點存在的。圖片被解碼成一塊畫素緩衝區;框覆蓋掉框內的畫素;緩衝區再被編碼成一個新檔案。編碼器拿到任何東西之前,原來的數值已經不在記憶體裡了,所以沒有圖層可以藏,沒有註解可以刪,也沒有歷史可以撤銷。你可以像檢查別人說法那樣檢查它:把結果用影像編輯器開啟找第二個圖層,或者試著選中你遮掉的那段文字。

打過碼或者模糊過的地方能被還原嗎?

有時候能,這也是選之前唯一值得讀的一段。塗成純色,下面的一切都變成同一種顏色,什麼都不剩:邊緣不剩,平均值不剩,連有幾個字都不剩。打碼是把每一塊換成那一塊的平均色,而一格一格的平均值仍然是對下面內容的一次測量。對於常見字型、大小也猜得到的文字,已經有公開的研究把候選字串照同樣的方式渲染、打碼,再比對平均值,從而還原出原文。模糊是一次卷積,而卷積原則上可以反過來算。所以背景裡的人臉儘管打碼,凡是能讀成文字的都塗黑。

在文件軟體裡畫一個黑色矩形,為什麼不是一回事?

因為大多數軟體把那個矩形存在圖片旁邊,而不是存進圖片裡。在 PDF 閱讀器、投影片、文書處理軟體或者帶圖層的影像編輯器裡畫出來的形狀,是一個帶位置的物件,壓在頁面上面。把它挪開、刪掉,或者換一個程式開啟這個檔案,被它蓋住的東西就原樣回來了。報社、法院和政府部門都這樣釋出過檔案。這裡根本不儲存那個矩形,留下的只是寫在原來數值之上的畫素值。

它會不會一併去掉 EXIF 和 GPS 資訊?

會,順帶的。儲存的意思是把一塊畫滿畫素的畫布寫出來,而畫布不帶任何標籤,所以拍攝地點、相機型號、時間戳和內嵌縮圖根本不會被寫進新檔案。縮圖在這裡尤其要緊:它是圖片的第二份小副本,照片被編輯之後不一定會重新產生,一張塗黑過的照片帶著沒塗黑的縮圖出門,整件事就白做了。如果你只想去掉後設資料、又不想讓圖片被重新編碼,EXIF 檢視與清除改寫的是容器本身。

它能讀能寫哪些格式?

凡是你的瀏覽器能解碼的它都能讀,實際上就是 JPEG、PNG、WebP、GIF、BMP,以及大多數當前瀏覽器上的 AVIF。寫出來的是 JPEG、PNG 和 WebP,因為瀏覽器內建的就是這三個編碼器。選「自動」時,JPEG 還是 JPEG,其餘一律 PNG,這樣照片保持照片的體積,截圖上沒被遮住的文字也保持清楚。這個選擇跟塗黑沒關係:編碼器看到它們的時候,那些畫素早就沒了。

不用滑鼠能做嗎?

能。「在中間加一個框」會放一個到圖上,Tab 鍵在框之間切換,方向鍵移動當前的框,Alt 加方向鍵改它的大小,按住 Shift 每步走十個畫素,Delete 鍵刪掉它。每個框在圖片下面還有一行,寫著大小、位置、它做什麼,以及一個刪除按鈕,所以整個工具都可以用鍵盤操作,也讀得出來。

手機上能用嗎?

能。拉框、移動和改大小走的是指標事件,不是滑鼠事件,所以手指的效果一樣,觸控屏上把手還會畫得更大一些。螢幕上的圖片在你操作時是按螢幕尺寸重畫的;檔案本身永遠是在你按下按鈕的那一刻,按原始解析度塗黑的。

免費嗎?要註冊嗎?

免費,沒有帳號、沒有登入、沒有試用期,也沒有水印。圖片大小也沒有上限,因為沒有哪臺伺服器在為它付錢,工作是在你自己的裝置上乾的。網站靠廣告養著,而廣告那邊拿不到任何關於你圖片的東西。