这个页面的代码没跑起来。

直接从文件夹里打开 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 元数据,不重新编码图片。AVIF 支持只读查看提取到的 EXIF,清理时将第一张解码后的图片转换为新的 PNG,颜色或 HDR 可能改变。

它能读能写哪些格式?

凡是你的浏览器能解码的它都能读,实际上就是 JPEG、PNG、WebP、GIF、BMP,以及大多数当前浏览器上的 AVIF。写出来的是 JPEG、PNG 和 WebP,因为浏览器自带的就是这三个编码器。选「自动」时,JPEG 还是 JPEG,其余一律 PNG,这样照片保持照片的体积,截图上没被遮住的文字也保持清楚。这个选择跟涂黑没关系:编码器看到它们的时候,那些像素早就没了。

不用鼠标能做吗?

能。「在中间加一个框」会放一个到图上,Tab 键在框之间切换,方向键移动当前的框,Alt 加方向键改它的大小,按住 Shift 每步走十个像素,Delete 键删掉它。每个框在图片下面还有一行,写着大小、位置、它做什么,以及一个删除按钮,所以整个工具都可以用键盘操作,也读得出来。

手机上能用吗?

能。拉框、移动和改大小走的是指针事件,不是鼠标事件,所以手指的效果一样,触摸屏上把手还会画得更大一些。屏幕上的图片在你操作时是按屏幕尺寸重画的;文件本身永远是在你按下按钮的那一刻,按原始分辨率涂黑的。

免费吗?要注册吗?

免费,没有账号、没有登录、没有试用期,也没有水印。图片大小也没有上限,因为没有哪台服务器在为它付钱,活儿是在你自己的设备上干的。站点靠广告养着,而广告那边拿不到任何关于你图片的东西。