2009-12-07 2 views
1

제가 작업중인 시스템에는 com.drew.metadata 패키지를 사용하여 JPEG 파일에서 메타 데이터를 추출하는 기능이 있습니다. http://www.drewnoakes.com/code/exif/ 그러나이 파일은 JPEG 파일로 제한되어 있습니다. 이제 고객이 TIF 및 다른 이미지 형식에서 IPTC를 추출하는 것에 대해 질문했습니다.Java를 사용하여 tif 파일에서 IPTC/EXIF ​​데이터 추출하기

아무도 Drew Noakes와 비슷한 API에 대해 알고 있습니까? TIF에서 IPTC를 추출 할 수 있습니까?

이상적으로 이것은 com.drew.metadata과 같은 순수한 Java 방식 일 것입니다.

답변

0

순수 Java 구현을 찾을 수없는 경우 ImageMagick (JMagick)에 대한 Java 바인딩 사용을 고려해 볼 수 있습니다. 그러면 다양한 출력 형식이 가능해질 것입니다.

2

최근에 icafe Java 이미지 라이브러리의 메타 데이터 조작 부분을 코딩하고 EXIF, IPTC, PHOTOSHOP, ICC_Profile, 썸네일 등의 메타 데이터 유형을 삽입하고 추출 할 수있게 만들었습니다. 일부 기능은 다른 것보다 낫지 만 모두 비교적 잘 작동합니다. 우리는 "이미지"에서 "iptc.tif"이미지를 전달하는 경우

import java.io.IOException; 
    import java.util.List; 
    import java.util.Map; 

    import com.icafe4j.image.meta.Metadata; 
    import com.icafe4j.image.meta.MetadataType; 
    import com.icafe4j.image.meta.iptc.IPTC; 
    import com.icafe4j.image.meta.iptc.IPTCDataSet; 

    public class TestIPTC { 

     public static void main(String[] args) throws IOException { 
      Map<MetadataType, Metadata> metadataMap = Metadata.readMetadata(args[0]); 
      // Show IPTC specific information 
      IPTC iptc = (IPTC)metadataMap.get(MetadataType.IPTC); 
      if(iptc != null) { 
       // Retrieve a list of Keywords Dataset 
       List<IPTCDataSet> keywords = iptc.getDataSet("Keywords"); 
       //List<IPTCDataset> keywords = iptc.getDataSet(IPTCEnvelopeTag.KEY_WORDS.getName()); 
       for(IPTCDataSet keyword : keywords) 
        //System.out.println(keyword.getName()); 
        //System.out.println(keyword.getDataAsString()); 
        keyword.print(); 
      } 
     } 
    } 

가 인수로 프로젝트의 디렉토리, 우리는 다음과 같은 정보를 얻을 것이다 : 아래 모든 메타 데이터 읽기를위한 공통 인터페이스가있다 :

Record number 2: Application Record 
Dataset name: Keywords 
Dataset tag: 25[0x0019] 
Dataset size: 6 
Dataset value: Bayern 
Record number 2: Application Record 
Dataset name: Keywords 
Dataset tag: 25[0x0019] 
Dataset size: 11 
Dataset value: Deckelstein 
Record number 2: Application Record 
Dataset name: Keywords 
Dataset tag: 25[0x0019] 
Dataset size: 7 
Dataset value: Germany 
Record number 2: Application Record 
Dataset name: Keywords 
Dataset tag: 25[0x0019] 
Dataset size: 10 
Dataset value: Nittendorf 

위 코드는 JPEG와 TIFF 모두에서 작동합니다. 자동으로 이미지 유형을 감지하고 해당 코드를 위임하여 작업을 수행합니다.

참고 : IPTC 데이터가 포함 된 TIFF 파일에 둘 이상의 위치가있을 수 있습니다. 하나는 RichTiffIPTC 태그이고, 다른 하나는 Photoshop 태그 안에 있습니다. 현재 icafe는 하나의 IPTC 데이터 만 유지합니다. IPTC 데이터가있는 Photoshop 태그와 RichTiffIPTC 태그가 모두 있으면 RichTiffIPTC 데이터가 유지됩니다. 그렇지 않으면, 존재하는 태그는 그 태그로부터 IPTC 데이터를 유지합니다. 두 위치에서 데이터를 유지하는 데 아무런 문제가 없습니다. 메타 데이터 유형 키를 고유 메타 데이터에 매핑하는 맵을 사용하는 현재 구현입니다. 따라서 하나의 고유 한 메타 데이터 인스턴스 만 유지합니다.

업데이트 :icafe 이제 RichTiffIPTC와 Photoshop IRB의 IPTC 데이터를 결합하고 중복을 제거 할 수 있습니다.

관련 문제