java jpg 像素编辑
Posted
技术标签:
【中文标题】java jpg 像素编辑【英文标题】:java jpg pixel editing 【发布时间】:2014-07-29 02:00:30 【问题描述】:我有一个关于 jpg 图像创建 ImageIO.write(imgStega, "jpeg", file) 的问题: 我正在做一些隐写术,我必须将数据隐藏在每个像素的最低有效位中。我使用 getRGBA()[pos] 执行此操作,它为我提供红色、蓝色、绿色、Alpha 分量。然后我根据 %2 用 +1 或 -1 更改每个值。
问题是,每次我使用 ImageIO.write 时,它都会随机更改我的所有图像(它正在压缩)。那么,我怎样才能按原样保存我的图像呢?我没有看到任何对真实图像进行隐写术的解决方案。
不管我用的是png还是jpg都是一样的,权重都是变化的。你知道如何按原样保存我的图像吗?
提前致谢!
【问题讨论】:
欢迎来到 SO!您看到的变化不是随机的,而是预期的。无论如何,使用不同的图像文件格式(无损格式,如 PNG、BMP 或 TIFF)应该可以解决这个问题。 “体重变化”是什么意思?或许添加代码的相关部分也有助于获得更好的答案。 嗨,谢谢 ^^ 的 jpg 格式,我的问题是当我使用 ImageIO.write(imgStega, "jpeg", file) 我压缩了我的图像和一些我对图像所做的更改丢失了,因为像素的某些 R、G、B 分量发生了变化。你知道用这个函数(或另一个函数)强制对 jpg 进行“无损”压缩的方法吗?我尝试了一些,但没有奏效。对于 png 格式,我的修改并没有丢失,但是我的图像的重量从 708ko 到 707ko,我不明白为什么(你不能用 png 压缩 png,对吗?) Djizeus 很好地回答了你的问题。我将添加一点,即 jpg 压缩在开始时有一个有损部分,而其余的编码是无损的。所以你可以做 jpg 隐写术,如果你在有损部分之后做。像素 lsb 替换不适用于 jpg,您需要其他方法。 【参考方案1】:JPEG 根据定义是有损的,因此您看到的数据修改是预期的,在您的上下文中您无能为力。
另一方面,PNG 也被压缩但是以无损方式进行的。 png 文件的大小会发生变化,因为 png 压缩类似于常规文件压缩(称为 LZ):非常粗略地解释,它检测重复的字节模式并将它们编码为更少的字节。更改图像的字节会改变这些模式,这可能会改变压缩的效率。你也可以看到尺寸的增加。但是,当应用程序打开您修改后的图像时,它应该会准确地看到您存储的字节数。
大小的变化是否值得关注,因为这可能会让别人检测到您的修改?在这种情况下,除了仅使用未压缩格式之外,我没有看到任何其他解决方案。
【讨论】:
以上是关于java jpg 像素编辑的主要内容,如果未能解决你的问题,请参考以下文章