2014-12-09 1 views
1

제 문제는 많은 양의 RDF 데이터를 JPEG 이미지에 XMP 헤더에 삽입하려고합니다. RDF는 내 응용 프로그램에 고유하며 사용자 정의 네임 스페이스 등이 있습니다. 그러나 RDF를 삽입하는 프로세스에는 영향을 미치지 않습니다. 적은 양의 RDF 데이터로이 작업을 수행 할 수 있지만, 더 큰 값을 삽입하려고하면 XMP 패킷 크기 제한에 도달합니다.여러 패킷을 사용하여 대량의 XMP 데이터를 jpg에 삽입 하시겠습니까?

저는 Java와 Apache Sanselan lib를 사용하고 있습니다. 그러나 다른 라이브러리를 사용할 수는 있습니다.

아래 코드는 테스트 응용 프로그램에서 사용하는 코드입니다. 그러나 필자는 필요한 모든 데이터를 삽입하기 위해 여러 개의 XMP 패킷으로 분할하는 방법을 모르겠습니다. 올바른 방향으로

어떤 도움이나 포인터는 크게 감상 할 수있다 :)

감사 어도비 XMP 사양 부분 3 인용

private static File writeXmpToFile(File file, String xmpXmlAsString) 
       throws FileNotFoundException, ImageReadException, IOException, 
       ImageWriteException { 

     String XmpXmlAsString = xmpXmlAsString; 

     File fileWithXmpXml = new File(file.getParent(), file.getName()+ ".added-xmp" + ".jpg"); 
     OutputStream os = null; 
     try { 
       os = new BufferedOutputStream(new FileOutputStream(fileWithXmpXml)); 
       new JpegXmpRewriter().updateXmpXml(new ByteSourceFile(file), os, XmpXmlAsString); 
     } finally { 
       if (os != null) { 
         os.close(); 
       } 
       os = null; 
     } 
     return fileWithXmpXml; 
} 
+0

외부에서 메타 데이터 저장을 고려해 보셨습니까? – Michael

+0

예 메타 데이터를 쉽게 전달하기 위해 내부적으로 JPEG에 저장하고 싶지만 외부에서 메타 데이터를 저장하는 것을 고려했습니다. 내부적으로 저장할 수없는 경우 외부 저장은 내 마지막 수단입니다. – Andy

+0

나는 C++로만 작성된 Adobe의 XMPFiles lib를 사용해야 함을 발견했습니다. 유망한 JNI 동적 라이브러리를 찾았습니다. http://www.chilkatsoft.com/java-xmp.asp 현재이 기능을 사용하여 내 요구 사항을 충족하는지 확인하려고합니다. 내가 작동하게되면/내가 업데이트 할 것입니다. :) – Andy

답변

1

: JPEG 섹션에 대한 일반 규칙에 따라

을 헤더와 다음 데이터는 최대 65535 바이트 일 수 있습니다. XMP 패킷을 여러 APP1 섹션으로 분할하지 않으면 XMP 패킷의 크기는 최대 65502 바이트가 될 수 있습니다. XMP가이 크기를 초과하는 것은 드문 경우입니다. 일반적으로 약 2KB입니다.

직렬화 된 XMP 패킷이 64KB 제한보다 커지면이 패킷을 기본 부분 (StandardXMP)과 확장 부분 (ExtendedXMP)으로 나눌 수 있으며 여러 JPEG 마커 세그먼트에 저장할 수 있습니다. 독자는 ExtendedXMP가 있는지 확인하고, 존재하는 경우 데이터를 기본 XMP와 통합해야합니다. 각 부분 (표준 및 확장)은 표준 패킷 ​​부분 에만 전체 패킷 래퍼가 포함되어 있지만 완전히 구성된 XMP 메타 데이터 트리입니다. 데이터가 64KB 제한의 두 배보다 큰 경우 확장 부분을 으로 분할하여 여러 마커 세그먼트에 저장할 수도 있습니다. 이 경우, 분할 된 부분은 메타 데이터 트리가 완전히 형성되지 않습니다 ( ).

ExtendedXMP가 필요한 경우 중요한 데이터를 주요 부분에 할당하고 일부 데이터를 확장 부분 또는 부분에 할당하는 알고리즘에 따라 메타 데이터를 분할해야합니다. 읽기 또는 쓰기 중 - 메타 데이터 관리 코드의 대부분

는 현재 하나의 APP1 세그먼트에 맞는 표준 XMP 부분 다룬다. Exiftool은 ExtendedXMP에서 문제가없는 것으로 보입니다.

ExtendedXMP 구조와 JPEG 다중 세그먼트에 포함되는 방법에 대해서는 here으로 대답했습니다.

기본적으로, 당신은 두 부분으로 전체 XMP 데이터를 분할해야합니다 패킷 래퍼도 잘 형성 XMP 인 ExtendedXMP로하지만 패킷 하나 개 APP1 세그먼트에 맞게됩니다 표준 XMP를 싸개. ExtendedXMP 부분은 어떤 크기라도 될 수 있으며 이 단일 APP1의 한계를 초과하면 분할되어 개의 APP1 세그먼트에 삽입됩니다.

위의 링크 된 코드는 두 부분으로 나누고 표준 XMP 부분을 하나의 APP1 세그먼트 제한보다 작게 유지하면 큰 XMP 데이터를 삽입 할 수 있습니다.