我正在寻找一个具有用于返回图像 DQT 接口的 Java 库。我知道例如 exiftool 可以做到这一点,但 Java 包装器似乎没有接口。任何指针表示赞赏。一些 JNI 绑定也可能对我有用。
提前致谢!
我正在寻找一个具有用于返回图像 DQT 接口的 Java 库。我知道例如 exiftool 可以做到这一点,但 Java 包装器似乎没有接口。任何指针表示赞赏。一些 JNI 绑定也可能对我有用。
提前致谢!
您可以从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 的质量设置。