双向可逆
同一个页面既做混淆也做解混淆,二者共用曲线和位移参数。宽高不变时,往返一次就能回到原画面。
把一张被小番茄算法打乱的图片放进来,点一下“解混淆”,画面会沿着原来的路线回到起点。 整个过程在你的浏览器里完成,图片不会离开设备;反过来,你也可以把一张普通图片混淆后再发出去。
点击选择、拖拽文件,或直接粘贴剪贴板里的图片。支持 JPG、PNG、WebP 等常见格式。
处理方向
图片只在当前标签页内解码与重排,不会上传;关闭页面后,浏览器会回收内存中的图像。
What it does
理解这一点,后面的现象就都说得通:为什么看起来像噪声、为什么能还原、为什么不能当加密。
一张图片在浏览器里是一张按行、按列排好的色块表。每个格子记着红、绿、蓝和透明度四个数值, 我们看到的画面来自这些数值原来的位置关系。混淆做的事很朴素:把这些格子沿一条固定路线整体挪一个距离, 颜色值一个都没有改。
解混淆不是“猜”出原图,而是把同一套搬运规则反过来执行。每个格子都有唯一的去处,也都知道自己从哪来, 所以只要宽高不变,画面就能精确回到起点。它更像按固定顺序切一叠扑克牌,而不是把牌烧掉重画。
也正因为规则公开、没有密钥,任何人都能用同一个页面把图还原。它适合挡住“顺手一看”, 不适合承担真正的保密任务。这个边界会在后面的对比和隐私说明里反复出现。
这是一种“视觉遮挡”,不是加密。没有密码,规则公开,拿到图片的人只要打开本站就能还原。 证件、银行卡、私密影像、商业资料不应该只做混淆;判断标准很简单——如果这张图泄露会带来实际损失, 就请使用带密钥的加密工具。
Three steps
界面上的按钮顺序就是操作顺序。第一次使用时,建议先用示例图片走一遍,再换成自己的图。
点“选择图片”、把文件拖进虚线框,或者复制图片后直接按 Ctrl/⌘ + V。导入后可以查看宽高,确认没有超过单张上限。
普通图片点“混淆图片”;收到一张看不懂的图,点“解混淆图片”。需要反复处理时,把输出格式切到 PNG 可以减少压缩痕迹。
点“下载结果”保存当前画面。把混淆结果发给朋友,对方打开本页、导入、点“解混淆”,就能看到原画面。
Capabilities
没有账号体系,也没有花哨的预设。这里列出的能力,都是围绕“导入、处理、保存”这一条路径展开的。
同一个页面既做混淆也做解混淆,二者共用曲线和位移参数。宽高不变时,往返一次就能回到原画面。
曲线顺序、位移公式、像素搬运方向都与公开参考实现一致。尺寸相同的前提下,两边可以互相还原。
读取、重排、导出全部使用浏览器自带的 Canvas 接口。断网也能用,处理过程中没有图片数据被发出。
默认输出与参考实现一致的 JPG,体积友好;需要像素级往返或保留透明通道时,切换到 PNG。
点选文件、拖拽到画布、直接粘贴剪贴板里的图片都支持。没有图片时,还可以用内置示例先试一次。
页面按移动端重新排版,手机上同样能完成导入、处理和保存。页面加载完成后,断开网络也能照常计算。
Inside the algorithm
曲线决定“按什么顺序搬”,步长决定“搬多远”。两者都不复杂,但组合起来的效果足够让画面失去可读性。
曲线负责把二维画面拉成一条一维的“长队”,相邻的色块在队列里也尽量相邻;位移量取黄金分割比例的倒数, 约等于像素总数的 0.618 倍。这个比例的好处是,无论图片多大,都能把相邻像素甩到队列的另一段去, 又不容易出现“绕一圈回到原地”的短周期。
混淆时,第 i 个曲线点上的像素被搬到第 i + shift 个点;解混淆时,从后者读回前者。
同一组坐标、同一个步长,方向相反,这就是全部的秘密。
Compatibility
下面这些参数不是近似值,而是逐项对齐的结果。只要图片尺寸没有被改变,用参考实现混淆的图片可以直接在这里还原。
| 项目 | 本站取值 | 说明 |
|---|---|---|
| 曲线类型 | 广义希尔伯特(Gilbert)曲线 | 在任意宽高的矩形网格上生成不重复、不遗漏的遍历顺序。 |
| 位移步长 | round((√5 − 1) / 2 × W × H) |
黄金分割比例的倒数乘以像素总数,四舍五入到整数。 |
| 混淆方向 | 第 i 点 → 第 i + shift 点 | 把像素搬到曲线上更靠后的位置。 |
| 解混淆方向 | 第 i + shift 点 → 第 i 点 | 反过来读取,即可回到原来的座次。 |
| 处理上限 | 800 万像素 / 单边 4000 像素 | 超出后会等比缩小,避免移动端内存不足。 |
| 默认输出 | JPEG(质量 1) | 与参考实现一致,体积较小,但有轻微有损压缩。 |
| 无损选项 | PNG | 适合需要反复处理、像素级往返或保留透明通道的图片。 |
| 互通条件 | 宽高完全一致 | 裁剪、缩放、聊天软件改尺寸都会让还原结果错位。 |
Use cases
它不解决所有问题,但在“需要多一个动作才能看到内容”的场合里,比直接发原图更合适。
把关键剧情截图先混淆再发到群里。想讨论的人自己点一下还原,不想被剧透的人只看到一片噪声。
看看这个场景 02 / COMMUNITY活动答案、抽奖结果、课程彩蛋可以先发一张混淆图。多一步操作,既能制造悬念,也能减少被随手转走。
看看这个场景 03 / PREVIEW文章配图、设计稿、视频封面在正式发布前,用混淆图做预告。别人能看到颜色和构图,却读不到具体内容。
看看这个场景 04 / EASTER EGG生日祝福、纪念日、二维码提示,都可以先混淆再发。对方需要主动还原,才看得到你准备的那句话。
看看这个场景Parameters
这些数值直接决定一张图能不能处理、处理要等多久,以及为什么有些图还原失败。
| 项目 | 取值 | 对使用的影响 |
|---|---|---|
| 像素总数上限 | 8,000,000 | 约等于 3264 × 2448,超出会先等比缩小。 |
| 单边上限 | 4000 像素 | 长边或短边任一超过都会触发缩小。 |
| 超限处理 | 等比缩放 | 取三个约束中最小的比例,不拉伸变形。 |
| 默认输出 | JPEG(质量 1) | 兼容性好、体积小;反复往返会累积压缩痕迹。 |
| 可读格式 | JPG / PNG / WebP / GIF / BMP / AVIF | 实际支持范围取决于浏览器的解码能力。 |
| 动图 | 只取第一帧 | GIF、动态 WebP 经过画布后变为静态图。 |
| 透明通道 | JPG 输出铺白底 | PNG 可保留透明;JPG 不支持透明。 |
| 处理位置 | 当前浏览器 | 不上传、不排队、没有次数限制。 |
| 还原条件 | 宽高与混淆时一致 | 必须使用同序算法,且图片没有被裁剪或缩放。 |
Compare
同样是“让别人暂时看不懂”,四种常见做法的安全强度、可逆性和使用成本差别很大。
| 做法 | 主要目的 | 可逆 | 需要密钥 | 适合的场景 |
|---|---|---|---|---|
| 像素混淆 | 增加打开成本、遮挡缩略图 | 是,规则公开 | 不需要 | 防剧透、预览、彩蛋 |
| 加密 | 只有指定对象能看 | 是,凭密钥 | 需要 | 隐私、证件、商业资料 |
| 马赛克 | 让局部信息不可读 | 否 | 不需要 | 遮挡人脸、号码、背景 |
| 裁剪 / 遮挡 | 直接去掉敏感区域 | 否 | 不需要 | 分享前的彻底脱敏 |
如果目标是“别让人顺手看到”,混淆足够;如果目标是“没有授权就打不开”,请直接使用加密;如果目标是“这张图里根本不该出现这段信息”,请裁剪或彻底打码。不要用混淆替代后面三种。
FAQ
如果这里没有你的问题,完整版按“基础、操作、兼容、隐私、故障”分了组。
能。颜色值没有改变,只是像素的位置被整体重排。把同一张图放进首页,点“解混淆”,就会按相反的步长搬回去。前提是宽高与混淆时完全一致,并且没有经过裁剪或缩放。
不会。读取、重排、导出都在浏览器内完成,页面不会发起携带图片的请求。你可以打开开发者工具的 Network 面板,在处理过程中观察是否有图片数据被发出。
单张图片的像素总数上限是 800 万,单边上限是 4000 像素。超过任意一条时会先等比缩小,避免手机浏览器因为内存不足而崩溃。缩小后的图片无法与原始尺寸的结果互通,页面会给出提示。
不能。没有密码,规则公开,任何拿到图片的人都能用同一个页面还原。它适合防剧透、遮挡缩略图、增加一步打开成本,不适合保护证件、隐私影像或商业机密。
只要微信没有改变图片的宽高,就能还原。建议以“原图”或“文件”方式发送。如果对方保存后发现宽高变了,还原结果会出现整体错位,这时只能请发送方重新发一次原图。
可以。页面按移动端重新排版,按钮会铺满整行。iOS 与 Android 的主流浏览器都能完成处理,超大图片的速度会比电脑慢。处理时请保持页面在前台。
Keep reading
从操作细节到算法推导,再到安全边界,下面几篇把工具背后的东西讲清楚。
三种导入方式、两个处理方向、保存与分享的注意事项,以及最常见的卡点。
Principle为什么用空间填充曲线打乱二维数据,0.618 这个步长解决了什么问题。
Compatibility和参考实现对齐的参数,以及“为什么我这边还原失败”的逐项排查。
Privacy本地处理不等于绝对安全。哪些图不该用混淆,怎样验证数据没有离开设备。
Scenes防剧透、活动预告、草稿遮挡、彩蛋,以及不应该使用混淆的场合。
Compare五种常见做法的目的、成本与安全强度,一张表看清差异。