在C#中添加不可见的图像水印?

我想通过C#代码在我的JPEG图片中插入多个不可见的水印。 这意味着我需要一个可以完成这项工作的.NET库,而不需要一些外部批处理应用程序。

有什么建议?

有一个图像魔法库到c#的端口,它可以轻松地为您执行该操作…

在图片中存储“不可见”数据被称为“隐写术”。 Google搜索“steganography .net”会让这篇文章成为最受欢迎的文章 – 可能会有用。

这样做的目的是什么? 是否可以识别从您的网站上获取的JPG?

评论中的回应:“是的,我想通过使用一些强大且不可见的水印来保护我的照片。半可见的网站标识不是一种选择……”

问题恰恰是上面关于隐写术的讨论中描述的问题,与图像的稳健性有关。

任何你描述的水印都可以用来识别整个图像的直接副本,但是在我看来,如果它甚至被打开并再次保存在编辑器中,那么压缩有可能会发生变化。水印。 此外,如果有人要偷你的图像并做更广泛的修补颜色平衡,稍微裁剪一下等等,似乎不可能任何看不见的水印都足够强大以生存并保持可识别性。

不幸的是我在这里没有解决方案,但问题本身远非微不足道。 可能值得寻找其他方法,你也许可以与水印并行使用(可能是自定义元数据?防止图像被轻易保存?),使你的图像更难被窃取,或者如果它们的价值降低是…

devx.com上的这篇文章包含一个库(Stego),其中包含您可以使用的源代码:

保密秘密:使用.NET进行隐写术

实现该API后,在.bmp文件中隐藏消息是微不足道的:

ICoverFile cover = new BMPCoverFile("cover.bmp"); cover.CreateStegoFile("stego.bmp","Hello","MyPwd"); 

同样,您可以轻松地提取消息:

  IStegoFile stego = new BMPStegoFile("stego.bmp","MyPwd"); Console.WriteLine(stego.HiddenMessage); 

更新:哦,对不起。 Matt链接到同一篇文章……在写这个答案时没有看到。

如果它是您正在处理的重要应用程序,为什么不尝试付费服务?

Digimarc和Signumtech可以使用他们的SDK为您提供这种支持。