2013-07-14 3 views
2

이미지의 DQT를 반환하기위한 인터페이스가있는 Java 라이브러리를 찾고 있습니다. 나는 그것을 안다. exiftool은 그것을 할 수 있지만 Java 래퍼는 인터페이스를 가지고 있지는 않습니다. 모든 포인터는 감사하겠습니다. 일부 JNI 바인딩이 나를 위해 잘 작동 할 것입니다.자바에서 jpeg 파일의 양자화 테이블 읽기

미리 감사드립니다.

답변

4

ImageIO의 JPEGImageReader을 사용하여 IIOMetadata에서 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을 알기 쉽고 불편하지만, 작업을 수행합니다 (일부 비 규격 JPEG 파일 제외).

API가 마음에 들지 않으면 JFIF 스트림과 DQT 세그먼트를 직접 구문 분석하는 것이 어렵지 않습니다. an old blog post 및 일부 C 샘플 코드에서 영감을 얻어 JPEGQuality을 작성하여 DQT를 구문 분석하고 JPEG의 품질 설정을 다시 추정하려고합니다.