如何在命令行上为图像添加隐形水印?

如何在命令行上为图像添加隐形水印?

类似的问题在这里但是对于特克斯-文档。 Imagemagick 展示了水印的方法这里但不知道如何做到尽可能隐形。我目前只是将一些功能元素混淆到照片中,因此极难删除,而不会扭曲图像本身。是否有一些命令行工具可以向图像添加隐形水印,例如用显微镜检查但仍然可读?我有一个巨大的图像树(种类非常不同,因此水印应该采用环境等)——一些命令行工具可以在每张照片上快速隐形地添加水印?

答案1

我相信你正在寻找的是隐写术,一种在看似无辜的内容中隐藏消息的方法。

Linux 上似乎没有丰富的工具可以实现这一点,但是猜出1斯特吉德2会做你想做的事。开放斯特戈是另一个(带有命令行界面)。

例如outguess,我将您的问题文本复制/粘贴到Q.txt

$ ../src/outguess/outguess -k 'Unix&Linux' -d Q.txt Tux.jpg Tux_steg.jpg
Reading Tux.jpg....
JPEG compression quality set to 75
Extracting usable bits:   10126 bits
Correctable message size: 5008 bits, 49.46%
Encoded 'Q.txt': 4592 bits, 574 bytes
Finding best embedding...
    0:  2274(49.2%)[49.5%], bias  2008(0.88), saved:     2, total: 22.46%
    3:  2269(49.1%)[49.4%], bias  2007(0.88), saved:     3, total: 22.41%
   13:  2268(49.0%)[49.4%], bias  1977(0.87), saved:     3, total: 22.40%
   62:  2237(48.4%)[48.7%], bias  1992(0.89), saved:     7, total: 22.09%
   78:  2216(47.9%)[48.3%], bias  1964(0.89), saved:    10, total: 21.88%
78, 4180: Embedding data: 4592 in 10126
Bits embedded: 4624, changed: 2216(47.9%)[48.3%], bias: 1964, tot: 10119, skip: 5495
Foiling statistics: corrections: 1437, failed: 746, offset: 198.494881 +- 300.529142
Total bits changed: 4180 (change 2216 + bias 1964)
Storing bitmap into data...
Writing Tux_steg.jpg....
$ ../src/outguess/outguess -k 'Unix&Linux' -r Tux_steg.jpg out.txt
Reading Tux_steg.jpg....
Extracting usable bits:   10126 bits
Steg retrieve: seed: 78, len: 574
$ diff out.txt Q.txt 
$ echo $?
0

源图片(来自燕尾服.svg):

普通JPG,无水印

隐藏了您的问题的图片:

含有隐藏信息的文件

如果仔细观察,图像会有所不同,但第二张图像几乎是使用更高的 JPEG 压缩级别生成的。事实上,您的问题的完整文本混合在一起(并受密码保护),这一事实在视觉上根本不明显。
隐藏的信息越小,图像的视觉差异就越小。 (我无法在视觉上区分原始文件和嵌入“Copyright YOU 2012”的文件。)

1比较旧,但可以很好地构建。2
无法使用现代 C++ 编译器构建,因此需要进行一些源修复。

答案2

必须有一种方法可以将相当稳定的水印嵌入到图像中,DigiMark 就可以在 Photoshop 滤镜中做到这一点 - 那么为什么命令行工具不能也做到这一点呢?

这不是解决方案,而是它如何工作的想法...如果您在空白白色图像上创建不可见水印并将生成的代码混合到任何其他图像中,水印读取器能够从生成的图像中提取水印再次 - 即使再次修改/裁剪或打印并拍照。

因此,实际上批量添加给定的水印梯度代码不会成为问题 - 而是找到适当的签名算法和软件来提取水印。

相关内容