用Java读取jpeg文件的量化表

Vya*_*lav 2 java jpeg image-processing

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

提前致谢!

har*_*ldK 5

您可以从IIOMetadata使用 ImageIO 的JPEGImageReader.

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]);
}
Run Code Online (Sandbox Code Playgroud)

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

我一直觉得IIOMetadata笨拙和不方便,但它可以完成工作(除了一些非规范的 JPEG 文件)。

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