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

I'm searching for a Java library that has an interface for returning DQT of an image. I know that e.g. exiftool can do it, but the Java wrapper does not seem to have an interface for that. Any pointers are appreciated. Some JNI bindings will probably work for me as well.

Thanks in advance!

解决方案

You can get the DQTs from the IIOMetadata using ImageIO's 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]);

}

See Image Metadata DTD for docs on what data is available and how to access it.

I've always found the IIOMetadataakward and inconvenient, but it does the job (except for some non-spec JPEG files).

If you don't like the API, it's not too hard to parse the JFIF stream and the DQT segments yourself. Inspired by an old blog post and some C sample code, I wrote JPEGQuality, that parses the DQT and also tries to re-estimate the quality setting of the JPEG.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值