盲水印工具

在任意照片里嵌入不可见的文字或图片。像素看起来毫无变化,同样两个密码再走一遍就能把内容取回。全部在浏览器内运行,永不上传。

这两个密码到底在管什么?

两个密码都不是"给图片加密"——图片依旧能正常打开。它们控制的是隐藏算法里两个独立的洗牌步骤。少任何一个,提取端就会走错格子或读错顺序,只能得到噪声。

图片密码 → 决定把 bit 藏在图片的哪些格子里。
水印密码 → 决定这些 bit 写入的顺序。
  1. 1. 切成 4×4 小块整张图被切成 4×4 像素的小方块,每一块都是一个"候选藏点"。
  2. 2. DCT 后按图片密码换位每一块做 DCT(频域变换),然后用图片密码派生的种子对块内像素做确定性洗牌。
  3. 3. 按水印密码把 bit 打乱后写入你要藏的比特串,再用水印密码做一次洗牌,之后才写进 SVD 奇异值里。
  4. 4. 逆变换还原图片肉眼看不出变化。要读回来,提取端必须用同样两个密码倒着走完这两次洗牌。

密码错 → 噪声. 任何一个密码差 1,提取端要么落在别的格子上,要么把 bit 读错顺序——只会拿到纯噪声,不会拿到"部分正确"的信息。

抗攻击边界

盲水印适合做安静的归属标记和内部流转追踪,但不是万能 DRM。真正使用前,应该按图片会经历的处理方式测试一遍。

较稳最佳情况

PNG 往返、轻微亮度变化、受控缩放测试。

不稳定需要实测

JPEG 导出、加噪、平台二次压缩、截图和重滤镜。

高风险脆弱区域

大幅裁剪、旋转、严重降采样,或去掉水印所在区域的编辑。

下方提取模式里可以模拟缩放、裁剪、旋转、亮度和噪声,建议先测试再交付图片。

工作原理

  1. 1. 选一张图

    任意 PNG 或 JPG。图片越大能藏的信息越长。

  2. 2. 输入要藏的内容

    文字、URL 或一张小 logo,再设两个数字密码。

  3. 3. 保存结果

    下载带水印的 PNG,肉眼看不出与原图有别。

  4. 4. 之后再提取

    把这张图拖回来,输入同样两个密码,内容就出来了。

为什么用它

常见问题

什么是盲水印?

藏在图片里的信息,人眼看不到,程序可以取回,并且不需要原图。

能扛得住编辑吗?

可以。DWT-DCT-SVD 算法能扛住裁剪、缩放、旋转、亮度调节和轻噪声。

我的图片会被上传吗?

不会。全部通过 WebAssembly 在浏览器内处理。

能藏多少字?

取决于图片大小。1024×1024 大约能塞 16000 bit(≈2000 字符)。

为什么要两个密码?

一个决定藏在图片哪里,一个决定内容顺序。少一个就还原不出来。

与 Python 版 blind-watermark 兼容吗?

兼容。同一算法同一参数,一边嵌入的图可以另一边提取。