在Java中使用JPEG图像

时间:2014-03-22 02:38:46

标签: java jpeg bufferedimage pixels dct

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

我已使用此引用site手动执行像素数组的DCT功能。

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

然后将

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

这完美无缺,我可以查看图像。 (我用来压缩视觉效果的价值更好。)

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

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

希望这很清楚。

由于

2 个答案:

答案 0 :(得分:2)

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

Java有效地为您提供了一个JPEG编码器接口,可以让您执行保存图像等有用的操作。

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

将手工制作的DCT系数转换为JPEG文件可能涉及编写整个JPEG库。如果您不想完成所有工作,那么您可以修改现有库的源,以便它使用您的DCT系数。

答案 1 :(得分:1)

在DCT之前。 。 。

虽然JPEG不了解颜色,但JPEG文件格式使用YCbCr颜色空间是正常的。如果您正在考虑编写JPEG文件,则需要先进行此转换。

量化之后。 。 。

系数是运行长度编码的。这是您必须添加的一个步骤。这是JPEG编码中最复杂的部分。