java - 在 Java 中处理 JPEG 图像

标签 java jpeg bufferedimage pixel dct

我正在使用 BufferedImage 类将图像作为像素读入,然后使用位移将它们的适当组件放入单独的 int 数组中。这工作正常。

我用过这个引用 site使用像素阵列手动执行 DCT 函数。

使用的方法:forwardDCT(), quantitizeMatrix(), dequantitzeMatrax(), inverseDCT()

然后将其反馈到生成的图像数组中以重建 JPEG 文件,然后我使用 BufferedImage 的 write() 方法将像素数据写回图像。

这非常有效,我可以查看图像。 (更好的是我用来压缩视觉效果的值)。

我的问题是,有没有办法将量化系数作为压缩值写入 JPEG?

因为BufferedImage的write()方法输入的是像素数据,而不是系数数据?

希望这是清楚的。

谢谢

最佳答案

归根结底,DCT 计算只是整个 JPEG 编码过程中的一个步骤。一个完整的实现还必须处理量化、霍夫曼编码和符合 JPEG 标准。

Java 实际上只是为您提供了一个 JPEG 编码器的接口(interface),让您可以做一些有用的事情,比如保存图像。

ImageIO.write() 用于 JPEG 图像的 ImageWriter 取决于您的系统。 JPEG 的默认 ImageWriter 只允许您使用 JPEGImageWriteParam 类 (http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageWriteParam.html) 更改一些影响量化和编码的设置。

将您手工制作的 DCT 系数放入 JPEG 文件可能涉及编写整个 JPEG 库。如果您不想做所有这些工作,那么您可以修改现有库的源代码,以便它使用您的 DCT 系数。

关于java - 在 Java 中处理 JPEG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572763/

相关文章:

java - 玩!框架表单重定向不起作用

java - 错误 ':app:packageAllDebugClassesForMultiDex'。 > java.util.zip.ZipException : duplicate entry: com/squareup/picasso/RequestWeakReference

image - PNG、GIF、JPEG 和 SVG 的不同用例是什么?

c++ - 你如何在 C++ 中将字节数组转换回 jpeg

java bufferedimage数组数据立即改变

java - Spring AOP : confirming CGLIB proxy behaviour

java - 同时阅读但锁定编辑

c++ - 如何将文件夹图标设置为 jpeg 图像?

java - 增加 BufferedImage 的 PPI

java - 从 File 更改为 BufferedImage 时出现 IOException