在Java中读取jpeg文件的量化表

我正在寻找一个Java库,它有一个返回图像DQT的接口。 我知道例如exiftool可以做到这一点,但Java包装器似乎没有接口。 任何指针都表示赞赏。 一些JNI绑定也可能对我有用。

提前致谢!

您可以使用ImageIO的JPEGImageReaderIIOMetadata获取DQT。

 IIOMetadata metadata = jpegReader.getImageMetadata(); IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree(metadata.getNativeMetadataFormatName()); NodeList dqt = root.getElementsByTagName("dqt"); NodeList dqtables = ((IIOMetadataNode) dqt.item(0)).getElementsByTagName("dqtable"); JPEGQTable[] qTables = new JPEGQTable[dqtables.getLength()]; for (int i = 0; i < dqtables.getLength(); i++) { qTables[i] = (JPEGQTable) ((IIOMetadataNode) dqtables.item(i)).getUserObject(); System.out.println("qTables: " + qTables[i]); } 

有关可用数据以及如何访问数据的文档,请参阅图像元数据DTD 。

我总是发现IIOMetadata很难和不方便,但它完成了工作(除了一些非规范的JPEG文件)。

如果您不喜欢API,那么自己解析JFIF流和DQT段并不困难。 受到旧博客文章和一些C示例代码的启发,我编写了JPEGQuality ,它解析了DQT并尝试重新估计JPEG的质量设置。