将字节数组转换为图像并返回字节数组,值已更改

时间:2016-02-28 08:05:49

标签: image jpeg bufferedimage steganography

我尝试使用以下步骤实现隐写术: 1.将图像转换为缓冲图像 2.将缓冲图像转换为字节数组 3.对字节数组进行修改 4.将字节数组转换回缓冲图像 5.将其保存为jpg文件

当我再次读取保存的文件,将其转换为字节数组并发现字节数组与我在步骤3之后获得的字节数组不同时出现了问题。(尽管没有太大区别,因为6转换为7,9到8等等)

我真的不知道为什么会这样。

3 个答案:

答案 0 :(得分:1)

  1. 如果保存为JPEG,则RGB数据将转换为YCbCr。这两个颜色空间具有不同的色域,因此值被限制。

  2. 可以对JPEG数据进行二次采样,从而导致数据发生变化。您可以通过不进行二次采样来避免这些更改。

  3. JPEG DCT可能会引入小错误(如果正确实施,则限制为+/- 1)

  4. 量化将对数据进行相当大的更改。您可以通过在量化表中包含所有1来避免此步骤的更改。

  5. 无论你做什么,#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是最常见的。