# 图片涂黑与打码 遮住不该被看到的部分

你遮住的那块是从文件里删掉的，不是藏在文件里。

> 把照片或截图里的姓名、地址、账号遮住再存一份，被遮的像素是从文件里没了，不是压在一个矩形下面。全程在浏览器里跑。

这是一个浏览器交互工具，地址是 https://abox.tools/zh/redact-image/。文件在运行该浏览器的设备上处理。主动分享和可选联网功能都在页面上说明。下文是它的文字说明；使用工具请打开该地址。

## 你的图片**在浏览器里处理**，无须上传处理。

解码、涂改、重新写出来，全由你自己的浏览器完成，用的是它本来就带的编解码器。这个工具没有任何联网功能，不取东西，也不发东西。这一点在这里比在本站几乎任何一页都更要紧：送进打码工具的图片，正是那些姓名、地址、账号还看得清楚的图片。

- ✗ 不上传
- ✗ 不注册
- ✗ 无水印
- ✓ 断网能用
- ✓ 开源

## 图片怎么涂黑，才能让被遮住的那块真的没了

1. **选一张图片。** 截图、扫描件或者照片都行，只要浏览器打得开。它直接从你的硬盘读进来，这个过程里没有任何东西出去。
2. **在不该被看到的地方拉一个框。** 下一处再拉一个。框可以拖着移动，可以拉四周的把手改大小，也可以用 Tab 键选中再用方向键调整。框下面显示的就是真实结果，画它的正是稍后写文件的那段代码。
3. **在涂黑、打码、模糊里选一个，能选涂黑就选涂黑。** 涂成一片纯色，什么都不会留下。打码和模糊只是把像素换成它们自己的平均值，对付背景里的人脸够用，对付任何能读成文字的东西不够用。
4. **按「涂黑并保存」，然后检查文件。** 之后显示的那张图，就是成品文件被重新解码出来的样子。用编辑器打开找找图层，或者试着选中被遮住的文字：只有平平的一张图，你遮住的地方在它被写出来之前就已经被覆盖了。

## 说得更细的版本

[图片怎么涂黑，才能让被遮住的那块真的没了](https://abox.tools/zh/guides/redact-an-image/): 大多数软件画出来的黑色方块只是压在图片上面，随手就能挪开。真正的涂黑和只是遮住差在哪里，打过码的文字为什么能被读回来，以及发出去之前怎么检查一个文件。

## 工具箱里还有

- [EXIF 查看与清除](https://abox.tools/zh/exif-editor/): 看看一张照片把你交代了多少，然后删掉。
- [DICOM 阅片器](https://abox.tools/zh/dicom-viewer/): CT、MR、X 光和超声，连窗宽窗位、头信息和测量一起。
- [图片转 ICO](https://abox.tools/zh/image-to-ico/): 进去一张图，出来的是浏览器、Windows 和 Mac 各自要的每一个尺寸。
- [图片转 Data URI](https://abox.tools/zh/image-to-data-uri/): 整张图变成一行文本，直接粘进 CSS 或者 HTML。

## 常见问题

### 我的图片会被上传到什么地方吗？

不会。解码、涂改、重新写出来，都由你自己的浏览器在你自己的机器上完成。这个工具没有任何联网功能，不去取也不去送，页面的 `Content-Security-Policy` 写着它能联系的每一个地址，没有一个是本站的。把页面加载一次，然后断网，它照样能用。

### 被遮住的那块，真的从文件里没了吗？

是的，这个工具就是为这一点存在的。图片被解码成一块像素缓冲区；框覆盖掉框内的像素；缓冲区再被编码成一个新文件。编码器拿到任何东西之前，原来的数值已经不在内存里了，所以没有图层可以藏，没有批注可以删，也没有历史可以撤销。你可以像检查别人说法那样检查它：把结果用图像编辑器打开找第二个图层，或者试着选中你遮掉的那段文字。

### 打过码或者模糊过的地方能被还原吗？

有时候能，这也是选之前唯一值得读的一段。涂成纯色，下面的一切都变成同一种颜色，什么都不剩：边缘不剩，平均值不剩，连有几个字都不剩。打码是把每一块换成那一块的平均色，而一格一格的平均值仍然是对下面内容的一次测量。对于常见字体、大小也猜得到的文字，已经有公开的研究把候选字符串照同样的方式渲染、打码，再比对平均值，从而还原出原文。模糊是一次卷积，而卷积原则上可以反过来算。所以背景里的人脸尽管打码，凡是能读成文字的都涂黑。

### 在文档软件里画一个黑色矩形，为什么不是一回事？

因为大多数软件把那个矩形存在图片旁边，而不是存进图片里。在 PDF 阅读器、幻灯片、文字处理软件或者带图层的图像编辑器里画出来的形状，是一个带位置的对象，压在页面上面。把它挪开、删掉，或者换一个程序打开这个文件，被它盖住的东西就原样回来了。报社、法院和政府部门都这样发布过文件。这里根本不保存那个矩形，留下的只是写在原来数值之上的像素值。

### 它会不会一并去掉 EXIF 和 GPS 信息？

会，顺带的。保存的意思是把一块画满像素的画布写出来，而画布不带任何标签，所以拍摄地点、相机型号、时间戳和内嵌缩略图根本不会被写进新文件。缩略图在这里尤其要紧：它是图片的第二份小副本，照片被编辑之后不一定会重新生成，一张涂黑过的照片带着没涂黑的缩略图出门，整件事就白做了。[EXIF 查看与清除](https://abox.tools/zh/exif-editor/)可查看和编辑 JPEG、PNG 和 WebP 元数据，不重新编码图片。AVIF 支持只读查看提取到的 EXIF，清理时将第一张解码后的图片转换为新的 PNG，颜色或 HDR 可能改变。

### 它能读能写哪些格式？

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

### 不用鼠标能做吗？

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

### 手机上能用吗？

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

### 免费吗？要注册吗？

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

## 这条隐私承诺怎么核实

- **处理在这个浏览器里完成。** 本工具在浏览器里处理输入和结果，处理代码不把它们上传去处理。Content-Security-Policy 限制可用资源和连接目的地，但已允许的主机仍可接收请求。策略不检查载荷，不能单独证明什么都没有发出。请把具体操作的请求与源码核对，或断网完成该本地操作。
- **被遮的像素在这里就没了，不是在出门的路上。** 图片先解码成一块像素缓冲区，框直接写进这块缓冲区，缓冲区再交给编码器。这个页面里不存在一份把框当成单独图层的图片，因为这样的东西从来没被造出来，见 `src/redact.js`。
- **这里不去取任何东西。** `src/` 里没有 `fetch`，没有 `XMLHttpRequest`，也没有 `sendBeacon`。全部工作就是 `getImageData`、三个在字节上跑的循环，以及 `canvas.toBlob`，都是浏览器里本来就装好的。
- **框的事不会报给任何地方。** 你在哪里拉的框、拉了几个、多大、选了哪一种，都只在这个页面的内存里，关掉就没了。这个仓库里没有任何一个统计事件会带走其中任何一项；下载之后弹出的那一个问题，送出去的只有一个赞成或反对和工具的名字。
- **断网也能用。** 拔掉网线，工具照旧，因为它里面本来就没有联网这一步。这是所有证明里最简单的一个，也是涂黑护照之前值得先做一次的那一个。

**你可以自己核对。**上面这些不用你信。这个页面是仓库里的模板和配置生成出来的，构建脚本你能读，也能自己跑一遍，跑出来的结果就提交在 `dist` 分支上。拿实际发给你的内容，跟你自己从源码构建出来的结果对一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先读的几个文件：`config/site.toml` 里是 Content-Security-Policy，覆盖像素的三个函数在 `src/redact.js`，屏幕上看到的东西为什么是那三个函数画的，在 `src/preview.js`。
