我想通过 C# 代码在我的 JPEG 图片中插入多个不可见的水印。这意味着我需要一个 .NET 库来完成这项工作,而不是一些外部批处理应用程序。
有什么建议么?
在图片中存储“不可见”数据被称为“隐写术”。谷歌搜索“steganography .net”将这篇文章列为热门文章 - 可能证明是有用的。
有一个图像魔法库到 c# 的端口,它可以轻松地为您执行该操作......
这样做的目的是什么?是否可以让您识别从您的网站获取的 JPG?
评论中的回应:“是的,我想通过使用一些强大且不可见的水印来保护我的图片。半可见的网站徽标不是一种选择......”
这个问题正是上面讨论隐写术中描述的问题,与图像的鲁棒性有关。
任何像你描述的水印都可以用来识别整个图像的直接副本,但是在我看来,如果它甚至在编辑器中打开并再次保存,那么压缩影响的变化就有可能水印。此外,如果有人要窃取您的图像并对其进行更广泛的处理 - 修补色彩平衡,稍微裁剪它等等,任何不可见的水印似乎都不太可能足够强大以生存并保持可识别性。
不幸的是,我在这里没有解决方案,但问题本身远非微不足道。可能值得寻找其他方法,您可能可以与水印并行使用(可能是自定义元数据?防止图像被轻松保存?)以使您的图像更难被盗或降低它们的价值,如果它们是...
devx.com 上的这篇文章包含一个库 (Stego),其中包含您可以使用的源代码:
实现该 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);
更新:哦,对不起。马特链接到同一篇文章......在写这个答案时没有看到。
如果这是您正在开发的重要应用程序,为什么不尝试付费服务呢?
Digimarc和Signumtech可以使用他们的 SDK 为您提供这种支持。