我正在开发一款Android应用程序,该应用程序应该利用Google相机的新深度图生成功能。
基本上,Google已经描述了在此处使用的元数据here
我可以访问大部分元数据,但不幸的是,最重要的数据被编码为extendedXmp,我无法获得任何XMP解析库来正确解析它!
我尝试过Commons-Imaging、metadata-extractor和最近的Adobes XMPCore
XMPCore可能能够处理扩展版本,但没有文档说明如何从JPG文件中获取它来解析数据,它假定原始XMP数据被传递
是否有包括JPG文件的扩展部分的XMP解析的正确实现,或者我只是做错了什么?
这是我的尝试:
使用Commons-Imaging:
try {
String imageParser = new JpegImageParser().getXmpXml(new ByteSourceInputStream(imageStream, "img.jpg"), new HashMap<String, Object>());
Log.v(TAG, imageParser);
} catch (ImageReadException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
使用metadata-extractor
Metadata metadata = ImageMetadataReader.readMetadata(
new BufferedInputStream(imageStream), false);
XmpDirectory xmp = metadata
.getDirectory(XmpDirectory.class);
XMPMeta xmpMeta = xmp.getXMPMeta();
String uri = "http://ns.google.com/photos/1.0/depthmap/";
Log.v(TAG, xmpMeta.doesPropertyExist(uri, "GDepth:Format") + " " );
try {
XMPProperty hasExtendedXMP = xmpMeta.getProperty("http://ns.adobe.com/xmp/note/", "xmpNote:HasExtendedXMP");
Log.v(TAG, hasExtendedXMP.getValue().toString() + " " + new String(Base64.decode(hasExtendedXMP.getValue().toString(), Base64.DEFAULT)));
} catch (XMPException e) {
e.printStackTrace();
}