javajpg像素编辑

javajpg像素编辑,java,image,compression,rgb,steganography,Java,Image,Compression,Rgb,Steganography,我有一个关于jpg图像创建ImageIO.write(imgStega,“jpeg”,文件)的问题: 我正在做一些隐写术,我必须将数据隐藏在每个像素的最低有效位。我使用getRGBA()[pos]来实现这一点,它为我提供了红色、蓝色、绿色和Alpha组件。然后根据%2,我用+1或-1更改每个值 问题是,每次我使用ImageIO.write时,它都会随机更改我的所有图像(它正在压缩)。那么,我怎样才能保存我的图像呢?我看不到任何解决方案可以在真实图像上进行隐写术 无论我使用png还是jpg都是一样

我有一个关于jpg图像创建ImageIO.write(imgStega,“jpeg”,文件)的问题: 我正在做一些隐写术,我必须将数据隐藏在每个像素的最低有效位。我使用getRGBA()[pos]来实现这一点,它为我提供了红色、蓝色、绿色和Alpha组件。然后根据%2,我用+1或-1更改每个值

问题是,每次我使用ImageIO.write时,它都会随机更改我的所有图像(它正在压缩)。那么,我怎样才能保存我的图像呢?我看不到任何解决方案可以在真实图像上进行隐写术

无论我使用png还是jpg都是一样的,权重会发生变化。你知道如何保存我的图像吗

提前谢谢

从定义上讲是有损的,因此您看到的数据修改是预期的,在您的上下文中您对此无能为力

另一方面,也以无损方式压缩。png文件的大小会发生变化,因为png压缩类似于常规文件压缩(称为LZ):非常粗略地解释,它检测重复的字节模式,并用更少的字节对其进行编码。更改图像的字节会更改这些模式,这可能会改变压缩的效率。你也可以看到尺寸的增加。但是,当应用程序打开修改后的图像时,它应该能够准确地看到存储的字节


尺寸的变化是否是一个问题,因为这可能会让人检测到您的修改?在这种情况下,除了只使用未压缩格式之外,我看不到任何其他解决方案。

欢迎使用SO!您看到的更改不是随机的,而是预期的。无论如何,使用不同的图像文件格式(无损格式,如PNG、BMP或TIFF)应该可以解决这个问题。“体重变化”是什么意思?也许添加代码的相关部分也会有助于获得更好的答案。您好,谢谢^jpg格式,我的问题是,当我使用ImageIO.write(imgStega,“jpeg”,文件)时,我对图像进行了压缩,我对图像所做的一些更改丢失了,因为像素的一些R、G、B分量发生了变化。你知道用这个函数(或其他函数)强制对jpg进行“无损”压缩的方法吗?我试了一些,但没用。对于png格式,我的修改没有丢失,但是我的图像的权重从708ko增加到707ko,我不明白为什么(你不能用png压缩png,对吧?)Djizeus很好地回答了你的问题。我只想补充一点,jpg压缩在开始时有一个有损部分,其余的编码是无损的。所以你可以做jpg隐写术,如果你在有损部分之后做的话。像素lsb替换将不适用于jpg,您需要其他方法。