盲浮水印工具

在任意照片裡嵌入不可見的文字或圖片。像素看起來毫無變化,同樣兩個密碼再走一遍就能取回內容。全部在瀏覽器內運行,絕不上傳。

這兩個密碼到底在做什麼?

兩個密碼都不是「幫圖片加密」——圖片一樣能打開。它們控制的是演算法內兩個獨立的洗牌步驟。少任何一個,提取端就會走錯格子或讀錯順序,只會拿到雜訊。

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

密碼錯 → 雜訊. 任何一個密碼差 1,提取端就會落錯格子或讀錯順序——只能拿到純雜訊,不會拿到「部分正確」的資訊。

抗攻擊邊界

盲浮水印適合做安靜的歸屬標記和內部流轉追蹤,但不是萬能 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 兼容吗?

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