小番茄混淆解图
本站按「吉尔伯特曲线遍历 + 黄金分割位移」的像素置换方案工作,与原始方案逐字节一致:不重新发明算法,也不做任何会改变结果的“优化”。整个过程在你的浏览器里完成
- 支持批量处理
- JPG / PNG 双输出
三件事,做到底
工具不追求功能数量。它只保证一件事:同一张图片,无论处理多少次,结果都可预期、可复现、可逆。
解混淆
把被这套方案打乱的图片还原成可读画面。方向、尺寸、输出格式都会影响最终效果,工具会把位移量、循环个数等参数实时显示出来,便于判断处理是否符合预期。
- 支持点击、拖放、Ctrl + V 粘贴三种载入方式
- 处理结果直接替换图片,一键「还原」回到原图
- 输出格式可选 JPEG 或无损 PNG
混淆
把一张正常图片打乱成看不出结构的样子。它不会删除任何像素,只是把像素搬到别的位置,因此接收方用同一套规则就能还原——前提是你们事先约定好。
- 位移量随图片尺寸自动计算,无需手填参数
- 原图不被修改,随时可以「还原」
- 与「解混淆」互为逆操作,来回切换可核对
批量与打包
一次放入多张图片排队处理,完成后打包成 ZIP 下载。打包使用存储模式而非二次压缩——JPEG 与 PNG 本身已经压缩过,再压一次只会白耗时间。
- 队列内逐张显示尺寸、状态与体积变化
- 可单独下载某一张,也可整体打包
- 全程本地处理,队列再长也不产生上传流量
三步就能拿到结果
不需要注册、不需要设置参数,也不需要理解算法。理解算法只是为了在结果不符合预期时知道该改哪里。
载入图片
点击「选择图片」、把文件拖进图片区,或直接按 Ctrl + V 粘贴剪贴板里的截图。载入后只显示原图,不会自动开始处理。
点「混淆」或「解混淆」
看到的是乱图就点「解混淆」,想把图片打乱就点「混淆」。结果会就地替换图片区里的内容,不会跳页,也不会生成新文件。
核对并保存
点「还原」可以随时回到载入时的图片,来回对比。需要保存时点「下载结果」;要逐字节还原原始像素,先把输出格式切成 PNG。
整个方案只有两步,难的是细节
把混淆拆开看,它既不神秘也不复杂。真正需要小心的是边界:曲线必须恰好覆盖每个格子一次,位移量必须由图片尺寸算出来,输出格式必须与用途匹配。
第一步:沿曲线排队
用广义吉尔伯特曲线把 W × H 的像素阵列排成一维队列,共 N = W × H 个元素。曲线不自交、不遗漏、不重复,恰好走遍每个格子一次——这个「恰好一次」是可逆性的全部前提。
- 曲线是希尔伯特曲线在任意宽高矩形上的推广
- 曲线序用 32 位整型数组保存,元素是 y × W + x
- 曲线具备局部性:一维相邻的索引,二维上通常也相邻
第二步:整队平移
位移量 k = round((√5 − 1) / 2 × W × H),其中 (√5 − 1) / 2 ≈ 0.6180339887 是黄金分割共轭。把队列整体循环移位 k 位,再沿同一条曲线写回画布,得到的就是混淆结果。
- 解混淆就是朝反方向移动相同的距离,不需要密钥
- 位移会分解成 gcd(k, N) 个互不相交的循环
- k 是公开常量,所以它不提供任何保密性
上面这条折线就是吉尔伯特曲线本身:它从起点出发,不重不漏地走遍 26 × 14 共 364 个格子,红点是当前播放到的位置。位移量 k = round(0.6180339887 × 364) = 225,像素就是沿这条顺序被整体搬走 225 个位置。
| 分辨率 | 像素数 N | 位移量 k | k / N | 循环个数 | 单循环长度 |
|---|---|---|---|---|---|
| 640 × 480 | 307 200 | 189 860 | 0.618033854 | 20 | 15 360 |
| 1280 × 720 | 921 600 | 569 580 | 0.618033854 | 60 | 15 360 |
| 1920 × 1080 | 2 073 600 | 1 281 555 | 0.618033854 | 135 | 15 360 |
| 2048 × 1536 | 3 145 728 | 1 944 167 | 0.618034045 | 1 | 3 145 728 |
| 1000 × 1000 | 1 000 000 | 618 034 | 0.618034 | 2 | 500 000 |
注意 2048 × 1536 那行:位移量与像素总数互质,于是整个置换退化成一个覆盖全部像素的大循环。循环个数只影响实现细节,不影响可逆性。
什么时候值得用混淆
说清边界比罗列好处更有用。下面每个场景都同时写了它的失效条件。
发图前先打乱
截图里混进了不该外传的信息时,混淆能让画面不再被直接读懂。但注意顺序:必须先裁剪或涂黑,混淆不能替代脱敏。
防搬运提高直接复用的成本
让抓取工具拿到的是无法直接使用的乱图。这提高的是成本而不是门槛——本站本身就提供公开的解混淆入口。
教学演示把抽象概念变成可见的线
递归、二维降一维、局部性、双射,都能用一条曲线讲清楚。配合可视化页面,学生可以自己动手改网格尺寸观察变化。
日常还原朋友发来一张乱图
对方用同样的方案打乱后发给你,你只需要选对方向。记得先问清楚对方用的是哪套方案,不是所有乱图都用同一种规则。
连续处理需要更强一点的打乱效果
处理完成后直接再点一次「混淆」,位移量会沿曲线继续累加。但强度提升有限,不要把它当成加密强度的替代品。
先确认还没想好要不要用
常见问题里按隐私、算法、操作、画质四类给了直接答复,多数犹豫看完就能决定。
本地处理与上传处理,差在哪
这是一道架构选择题,不是功能对比。两条路都能完成同样的置换,但代价结构完全不同。
✓在浏览器本地处理
- 图片不出设备:没有上传接口,也就没有传输环节与服务器留存
- 没有等待与排队:处理耗时只取决于你的设备,不受网络与并发影响
- 可以离线使用:断网后功能照常,页面自带全部算法代码
- 代价:受浏览器内存上限约束,单张处理量被限制在 800 万像素
- 代价:性能取决于本机,老设备处理大图会明显变慢
↑上传到服务器处理
- 突破本机限制:服务端内存与算力更强,可以处理更大的图片
- 结果一致:只要实现相同,输出与本地处理没有差别
- 代价:图片必须完整离开你的设备,隐私取决于对方的存储与日志策略
- 代价:受上行带宽限制,大图上传往往比处理本身更慢
- 代价:离线不可用,站点不可用即功能不可用
本站选择本地处理,是因为这个算法的特点恰好适合:单遍线性遍历、无需模型、无需数据库、无需跨请求状态。换句话说,把它放到服务器上并不能换来质量提升,只会多出一个必须被信任的环节。
JPEG 还是 PNG,先看你要不要无损
| 对比项 | JPEG | PNG |
|---|---|---|
| 是否无损 | 有损,会改变像素值 | 无损,像素值不变 |
| 混淆→解混淆的往返结果 | 残留块状噪点,高频区域最明显 | 可逐字节还原原始像素 |
| 典型体积 | 照片类明显更小 | 照片类明显更大 |
| 兼容性 | 几乎所有平台与工具都支持 | 主流平台均支持,个别老系统例外 |
| 建议用途 | 打乱后分享,追求体积与兼容性 | 还原他人发来的图、需要长期存档 |
一句话结论:要还原质量就用 PNG,要与原方案的输出保持一致就用 JPEG。把 JPEG 调成 PNG 不会让已经丢失的高频信息回来,但可以避免在导出这一步再丢一次。
从这三篇开始最省时间
3 分钟上手:第一次把图片还原回来
从打开工具页到拿到结果,拆成三个具体动作,并说明每一步的判断依据与常见坑。
算法原理可逆性与误差分析:为什么还原后有噪点
先证明算法本身完全可逆,再逐层拆开 JPEG 的量化与色度抽样如何把噪点带进结果。
帮助中心常见问题 FAQ:22 个高频疑问
隐私、算法、操作、画质四类问题各归其位,每题一段直接答复,不绕弯。
算法原理置换流程与伪代码
把两步方案写成可以直接运行的代码,并解释为什么逐字节拷贝与逐像素拷贝等价。
故障排查处理失败与结果异常的排查手册
十行现象对照表,覆盖按钮无反应、格式不支持、颜色异常、尺寸被缩放等情形。
算法原理与同类方案的对比:混淆不是加密
六种置乱与保护方案在六个维度上的对照表,帮你判断该用哪个、不该用哪个。
- 吉尔伯特曲线
- 希尔伯特曲线在任意宽高矩形上的推广形式,一种不自交、不遗漏的空间填充曲线,用来把二维像素排成一维顺序。
- 位移量 k
- 队列整体移动的格子数,取 k = round((√5 − 1) / 2 × W × H),随图片尺寸自动计算,不是密钥。
- 双射
- 一一对应的映射关系。曲线恰好覆盖每个格子一次,置换才能反向执行,这是可逆性的前提。
- 无损往返
- 混淆再解混淆后,像素与原图逐字节一致。只有在整条链路都不做有损编码与缩放时才能成立。
大家最先问的五个问题
我的图片会被上传到服务器吗?
不会。本站没有上传接口,图片通过浏览器的文件读取能力载入,在画布上取像素、做置换、导出结果,整个过程都在当前标签页内完成。你可以断开网络后再试一次,功能完全正常。
想自己确认的话,打开浏览器开发者工具的 Network 面板,载入并处理一张图片,你会看到没有任何请求携带图片数据。更多细节写在隐私政策里。
混淆和加密是一回事吗?
不是。加密依赖密钥,没有密钥就无法还原,强度来自算法与密钥长度;混淆没有密钥,算法完全公开,任何人都可以用同样的规则还原。
混淆的目标是让画面不再被直接读懂、让自动化工具无法直接复用,而不是保密。把它当成加密使用会带来真实风险——如果你需要保护敏感信息,正确做法是把敏感部分裁掉或永久遮挡。
为什么还原后的图片有噪点?
因为置换算法本身是无损的,而 JPEG 是有损的。JPEG 在保存时做离散余弦变换与量化,会丢掉一部分高频信息;这些损失在还原后会被分散到画面各处,形成块状噪点与彩边。
要避免它,就得让整条链路都不做有损编码:输出选 PNG,中间不要截图、不要经过会二次压缩的聊天软件。细节见可逆性与误差分析。
支持多大的图片?处理不动怎么办?
单张上限是 800 万像素、单边不超过 4000 像素,与原始方案一致。超出时工具会先等比缩放到上限内再处理,因此这种情况下的结果不再是无损的。
如果没超限却依然很慢或页面失去响应,通常是设备内存吃紧。可以先裁剪掉不需要的部分再处理,或改用桌面浏览器;以 file:// 方式打开时,浏览器禁止创建后台线程,工具会自动改用主线程分批执行,结果一致但速度略慢。
能还原所有看起来乱七八糟的图片吗?
不能。本站只实现这一套方案:沿吉尔伯特曲线排队再做黄金分割位移。如果那张图是用别的规则打乱的,例如按行平移、分块洗牌、或者被裁剪旋转过,用本站处理只会得到另一张乱图。
判断线索是:本方案混淆后的图片,颜色分布与原图一致,只是结构被拆散,画面里通常还能看到连续的、蜿蜒的色带痕迹。看完解混淆教程里的四条特征,一般就能判断个大概。
三件我们明确承诺的事
不收集图片
没有上传接口,也没有图片存储。文件名、尺寸、处理记录都不落盘,刷新页面即清空。页面上唯一的第三方请求是用于统计访问情况的百度统计脚本,它不接触图片数据。
算法不掺水
曲线遍历与位移公式完全沿用原始方案,不做会改变结果的“优化”。构建阶段会把本站实现与原始实现逐字节比对,任意一处不一致都会导致构建失败,而不是悄悄发布。
边界说清楚
每一篇原理与教程文章都会写清方法的失效条件,不把混淆描述成加密,也不承诺“绝对安全”。技术说明里的数值都由与页面同源的代码算出,不是手工估算。