2014-05-11 1 views
0

Picasa의 얼굴 데이터를 (XMP로) 내 JPEG 파일에 저장 했으므로 Java에서 해당 정보를 읽으려고합니다. 지금까지 나는 실패하고 도움을 많이받을 것입니다.Java에서 JPEG의 XMP 얼굴 데이터를 읽는 방법

metadata-extractor 라이브러리를 사용하려고합니다 (다른 솔루션도 괜찮을 수 있지만). 기본 정보 (예 : 날짜, 이미지 크기 등)를 읽을 수 있지만 추가 데이터를 추출 할 때 분실됩니다. 이것은 내가 지금까지 무엇을 얻을 수 있습니다 :

File file -- this is my JPEG file 

Metadata metadata = JpegMetadataReader.readMetadata(file); 
XmpDirectory xmpDirectory = metadata.getDirectory(XmpDirectory.class); 
XMPMeta xmpMeta = xmpDirectory.getXMPMeta(); 
System.out.println(xmpMeta.dumpObject()); 

결과 : MWG-RS, W : :

ROOT NODE 
    http://www.metadataworkinggroup.com/schemas/regions/ = "mwg-rs:" (0x80000000 : SCHEMA_NODE) 
     mwg-rs:Regions (0x100 : STRUCT) 
      mwg-rs:AppliedToDimensions (0x100 : STRUCT) 
       stDim:h = "2793" 
       stDim:unit = "pixel" 
       stDim:w = "2047" 
      mwg-rs:RegionList (0x200 : ARRAY) 
       [1] (0x100 : STRUCT) 
        mwg-rs:Area (0x100 : STRUCT) 
         stArea:h = "0.69531" 
         stArea:unit = "normalized" 
         stArea:w = "0.790425" 
         stArea:x = "0.491451" 
         stArea:y = "0.41783" 
        mwg-rs:Name = "abcde" 
        mwg-rs:Type = "Face" 
    http://ns.adobe.com/xap/1.0/ = "xmp:" (0x80000000 : SCHEMA_NODE) 
     xmp:ModifyDate = "2014-04-06T19:43:24+01:00" 

나는이 stArea에 도착하는 방법을 이해하지 않는 유형 = "얼굴"등

답변

0

게시자가 게시 한 직후처럼 나는 found a solution입니다. 나는 그것을 여기에 갖기 위해 그것을 아래에 열거 할 것이다. 여기 좋아하지 않는 무엇

try { 
    Metadata metadata = ImageMetadataReader.readMetadata(imageFile); 
    XmpDirectory xmpDirectory = metadata.getDirectory(XmpDirectory.class); 
    XMPMeta xmpMeta = xmpDirectory.getXMPMeta(); 
    XMPIterator itr = xmpMeta.iterator(); 
    while (itr.hasNext()) { 
     XMPPropertyInfo pi = (XMPPropertyInfo) itr.next(); 
     if (pi != null && pi.getPath() != null) { 
      if ((pi.getPath().endsWith("stArea:w")) || (pi.getPath().endsWith("mwg-rs:Name")) || (pi.getPath().endsWith("stArea:h"))) 
       System.out.println(pi.getValue().toString()); 
     } 
    } 
} catch (final NullPointerException npe) { 
    // ignore 
} 

는 대신 필요한 것들을 읽기의 모든 속성을 반복한다는 것입니다. 더 나은 (더 빠른) 솔루션?