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

时间:2021-11-11 11:19:15

I want to insert multiple invisible watermarks into my JPEG pictures through C# code. That means that I need a .NET library that does this work and not some external batch application.

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

Any suggestions?

5 个解决方案

#1


there is a port of image magick library to c# , and it can easily perform that operation for you...

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

#2


Storing "invisible" data in pictures is known as "steganography". A Google-search for "steganography .net" yields this article as its top hit - might prove useful.

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

#3


What is the purpose of this? Is it to enable you to identify JPGs that have been taken from your site?

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

Response in comments: "Yes, I want to protect my pictures by using some robust and invisible watermark. Semi-visible site logo is not an option... "

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

The problem is precisely the one described in discussion of Steganography above, to do with the robustness of the image.

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

Any watermark like the one you describe can be used to identify a direct copy of the whole image, but with a jpg it seems to me that if it is even opened and saved again in an editor there is a chance of a change in compression affecting the watermark. Also if someone was to steal your image and do something more extensive with it- tinker with the colour balance, crop it a little and so on it seems unlikely that any invisible watermarking would be robust enough to survive and stay recogniseable.

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

Unfortunately I don't have a solution here, but the problem itself is far from trivial. It may be worth looking for other approaches to it, that you can perhaps use in parallel with watermarking ( custom metadata perhaps? preventing images being easily saved? ) to make it harder for your images to be stolen or to make them less valuable if they are...

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

#4


This article on devx.com contains a library (Stego) with source code you could use:

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

Keeping Secrets Secret: Steganography with .NET

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

After implementing that API, it's trivial to hide a message inside a .bmp file:

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

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

Likewise, you can extract the message just as easily:

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

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

UPDATE: Oh, sorry. Matt linked to the same article... didn't see that while writing this answer.

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

#5


If it is a important application that you are working on, why not trying a paid service?

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

Digimarc and Signumtech can give you that kind of support using their SDK.

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

#1


there is a port of image magick library to c# , and it can easily perform that operation for you...

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

#2


Storing "invisible" data in pictures is known as "steganography". A Google-search for "steganography .net" yields this article as its top hit - might prove useful.

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

#3


What is the purpose of this? Is it to enable you to identify JPGs that have been taken from your site?

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

Response in comments: "Yes, I want to protect my pictures by using some robust and invisible watermark. Semi-visible site logo is not an option... "

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

The problem is precisely the one described in discussion of Steganography above, to do with the robustness of the image.

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

Any watermark like the one you describe can be used to identify a direct copy of the whole image, but with a jpg it seems to me that if it is even opened and saved again in an editor there is a chance of a change in compression affecting the watermark. Also if someone was to steal your image and do something more extensive with it- tinker with the colour balance, crop it a little and so on it seems unlikely that any invisible watermarking would be robust enough to survive and stay recogniseable.

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

Unfortunately I don't have a solution here, but the problem itself is far from trivial. It may be worth looking for other approaches to it, that you can perhaps use in parallel with watermarking ( custom metadata perhaps? preventing images being easily saved? ) to make it harder for your images to be stolen or to make them less valuable if they are...

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

#4


This article on devx.com contains a library (Stego) with source code you could use:

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

Keeping Secrets Secret: Steganography with .NET

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

After implementing that API, it's trivial to hide a message inside a .bmp file:

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

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

Likewise, you can extract the message just as easily:

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

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

UPDATE: Oh, sorry. Matt linked to the same article... didn't see that while writing this answer.

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

#5


If it is a important application that you are working on, why not trying a paid service?

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

Digimarc and Signumtech can give you that kind of support using their SDK.

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