我尝试使用以下步骤实现隐写术: 1.将图像转换为缓冲图像 2.将缓冲图像转换为字节数组 3.对字节数组进行修改 4.将字节数组转换回缓冲图像 5.将其保存为jpg文件
当我再次读取保存的文件,将其转换为字节数组并发现字节数组与我在步骤3之后获得的字节数组不同时出现了问题。(尽管没有太大区别,因为6转换为7,9到8等等)
我真的不知道为什么会这样。
答案 0 :(得分:1)
如果保存为JPEG,则RGB数据将转换为YCbCr。这两个颜色空间具有不同的色域,因此值被限制。
可以对JPEG数据进行二次采样,从而导致数据发生变化。您可以通过不进行二次采样来避免这些更改。
JPEG DCT可能会引入小错误(如果正确实施,则限制为+/- 1)
量化将对数据进行相当大的更改。您可以通过在量化表中包含所有1来避免此步骤的更改。
无论你做什么,#1和#3都会引入JPEG压缩过程中的变化。
答案 1 :(得分:0)
JPG是一种有损的图像格式,因此您不能指望它在保存后准确保存数据。它特别适合隐写术,因为它会破坏这种使用所需的细节,即使使用最高质量的设置。
解决方案是使用无损格式,如PNG。
答案 2 :(得分:0)
BufferedImage可能已经是一个字节数组。如果在创建BufferedImage时使用编码TYPE_BYTE_GRAY,3BYTE_BGR或4BYTE_ABGR,那么您的BufferedImage已经是一个字节数组。要访问字节数组,请执行:{{1}}
当您将图像写为JPEG时,您会压缩图像。因此,您保存的信息会被更改,并且无法像以前一样进行检索。您应该使用PNG / TIFF / BMP,PNG是最常见的。