我正在使用 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/