Java 将信息存储在PNG文件中而不扭曲图像?

Java 将信息存储在PNG文件中而不扭曲图像?,java,png,Java,Png,我想将信息former:int/String写入一个PNG文件,而不使更改对人眼可见 为了实现这一点,我以字节数组的形式提取文件: byte[] imageAsBytes = fileInputStream.readAllBytes(); 在下一步中,我跳转标题8个字节,已经尝试了300个字节。我已经处理了我的信息,可以按位提取 我用按位提取的信息替换图片字节的最后一位 这适用于.bmp文件格式,但将此技术应用于PNG文件会扭曲图像 我的猜测是PNG文件在头之后包含附加信息 那么,在头之后是否

我想将信息former:int/String写入一个PNG文件,而不使更改对人眼可见

为了实现这一点,我以字节数组的形式提取文件:

byte[] imageAsBytes = fileInputStream.readAllBytes();
在下一步中,我跳转标题8个字节,已经尝试了300个字节。我已经处理了我的信息,可以按位提取

我用按位提取的信息替换图片字节的最后一位

这适用于.bmp文件格式,但将此技术应用于PNG文件会扭曲图像

我的猜测是PNG文件在头之后包含附加信息


那么,在头之后是否存储了任何信息?如果是,是什么将此信息部分标记为一个?

我认为最好的方法不是查看文件字节,而是使用一些png解码器打开它,然后在图像itslef处更改像素,然后使用png再次保存它。当您播放文件字节时,您肯定会破坏png格式,因为bmp的jsut逐像素直接保存到文件中,无需任何包装或编码

为了读取和解码.png文件,我们可以使用BuffereImage,如下所示:

File imageFile = new File("myimage.png");
BufferedImage image = ImageIO.read(imageFile);
不,我们可以使用getRGB和setRGB方法操纵其像素:


在此之后,BuffereImage应该通过管道传输到输出流,以便能够保存新图像。

快速的谷歌搜索可以获得PNG文件格式,wiki就是其中之一。@Phil M哦,是的,英文wiki获得了它!非常感谢。听起来很有趣。我会尝试它,只要我得到我的学校项目完成!
int pixel = image.getRGB(x, y);
// do some byte manipulation on the pixel
// ....
image.setRGB(x, y, pixel);