【问题标题】:Saving Jpeg image in C# changes pixels在 C# 中保存 Jpeg 图像会更改像素
【发布时间】:2013-04-18 15:10:36
【问题描述】:

我编写了自己的代码来实现隐写术项目来隐藏图像中的文本。代码完美运行。

但是当我将图像保存到 jpeg 文件并再次打开时,数据丢失,并且我得到一个垃圾结果文本(好像像素没有正确保存到新图像中)

但是当我将图像保存为Bmp格式时,我可以完美地得到隐藏的文本,就好像像素正确保存到输出图像中一样:

那么问题出在哪里?

【问题讨论】:

  • Jpeg 压缩是一种有损算法。所以 Steganography 不能使用 Jpeg
  • bmp 是一种非常古老的文件格式,压缩率很低(如果有的话?),您可能希望另存为 .png
  • 正如@I4V 指出的那样,如果您修改单个像素以存储隐藏值,则不应使用 jpg 作为输出格式。 png 也是有损的,所以 bmp 可能是最好的选择。
  • ...而且 bmp 是无损格式,所以隐写术有效。您可以使用其他无损格式,例如 .png 或 .gif。
  • 我刚刚尝试了 PNG 格式,它正在工作。感谢大家的帮助。

标签: c# image image-processing jpeg steganography


【解决方案1】:

您需要使用无损 jpeg,很少有库可以做到这一点(Pegasus、LeadTools) 如果你不能使用它们中的任何一个,那么你需要使用 PNG。 .Net 中的 Stock Jpeg 压缩是有损的,因此像素不会相同。

【讨论】:

  • 这正是我想要的,因为 PNG 尺寸相对较大。
  • albattran,您知道使用无损选项时的大小吗?真的比png还小吗?
  • @I4V 所以我们只会赢得延期。
  • @HamzehSoboh 大多数图片查看器/浏览器并不关心扩展。所以在延期上没有胜利。尝试将您的 bmp 文件重命名为 jpg 并点击它。
  • @I4V 我同意你的看法。 PNG 更适合此目的。
【解决方案2】:

如果您想将隐写术与有损压缩方法(如 JPEG)一起使用,那么您现有的算法显然不够稳健。

要查看在这种情况下如何使用隐写术的示例,请查看the open source F5-steganography project

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2020-12-04
    • 2014-08-14
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多