如何在命令行上向图像添加不可见的水印?


12

这里有类似的问题,但针对Tex -document。Imagemagick 在这里显示了给水印加水印的方法,但没有显示如何使水印尽可能不可见。我目前只是将一些功能元素混淆到照片中,以至于很难去除而又不会扭曲图像本身。是否有一些命令行工具可以在图像中添加不可见的水印,例如可以用显微镜检查但仍然可读?我有一棵巨大的图像树(种类繁多,因此水印应应用于环境等)-一些命令行工具可以在每张照片上隐形地添加水印吗?


2
我认为您的隐身性要求与加水印的目的不符。如果水印对于普通查看者是不可见的,则可以通过在图像上进行几次JPEG转换将其删除,因为JPEG可以使人们不会错过的细节变得平滑。
凯尔·琼斯

@KyleJones:谁需要JPEG作为格式?ImageMagick的只包含例子,我的目标是混淆水印到图片通过隐藏他们有点像在德州改变点。

2
我的观点是,JPEG转换或任何其他有损图像压缩算法都可以删除这种水印,而不是图像必须以JPEG开头。
凯尔·琼斯

没有目的的评论是错误的和误导的。当然,“看不见的水印”是矛盾的,但是它对于抽象的“隐秘信息”是一个有用的速记-几乎总是会自动将其纠正为“速记”(即,字面意思)。这里有一个用例背景资料:lia.deis.unibo.it/Courses/RetiDiCalcolatori/Progetti98/Fortini/...和一个示例实现:howtoforge.com/tutorial/...
迈克尔

Answers:


9

我相信您正在寻找的是隐写术,一种将消息隐藏在其他看起来纯真的内容中的方法。

似乎没有成为一个丰富的工具,有这个在Linux上,但看透1steghide 2会做你想要什么。openstego是另一个(带有命令行界面)。

以的示例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

源图像(来自Tux.svg):

纯JPG,无水印

图片中隐藏了您的问题:

带有隐藏信息的文件

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

1个旧的,但构建良好。
2不是使用现代C ++编译器构建的,因此需要进行一些源代码修复。


OpenStego确实具有CLI,我编辑了您的答案并链接到它。
2014年

0

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

这不是解决方案,而是一个思路,如何工作...如果您在空白的白色图像上创建不可见的水印并将结果代码混合到任何其他图像中,则水印阅读器便可以从结果图像中提取wartermark。再次-即使修改/裁剪或打印并再次拍照。

因此,实际上批量添加给定的水印渐变代码将不是问题-而是找到合适的签名算法和软件来提取水印。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.