2

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

提前致谢!

4

1 回答 1

5

您可以从IIOMetadata使用 ImageIO's获取 DQT 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]);
}

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

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

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

于 2013-07-14T20:35:56.373 回答