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

时间:2013-07-14 20:05:20

标签: java image-processing jpeg

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

提前致谢!

1 个答案:

答案 0 :(得分:4)

您可以使用ImageIO&{39} IIOMetadataJPEGImageReader获取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]);
}

有关可用数据和访问方式的文档,请参阅Image Metadata DTD

我总是找到IIOMetadata akward并且不方便,但它完成了工作(除了一些非规范的JPEG文件)。

如果您不喜欢API,那么自己解析JFIF流和DQT细分并不难。受an old blog post和一些C示例代码的启发,我写了JPEGQuality,它解析了DQT并尝试重新估计JPEG的质量设置。