Exiv2 With XMP for Android
摘要
最近在从事VR行业,工作中需要将VR相机拍摄的360图片被各大VR平台识别,比如Facebook、Google Photo、LINE等。这些平台都是遵循google定的一套VR协议,详细可参考链接https://developers.google.com/streetview/spherical-metadata?hl=zh-cn。这些信息都是保存到图片的XMP(XMP stands for “Extensible Metadata Platform”, an XML/RDF-based metadata format which is being pushed by Adobe. Information in this format can be embedded in many different image file types including JPG, JP2, TIFF, GIF, EPS, PDF, PSD, IND, INX, PNG, DJVU, SVG, PGF, MIFF, XCF, CRW, DNG and a variety of proprietary TIFF-based RAW images, as well as MOV, AVI, ASF, WMV, FLV, SWF and MP4 videos, and WMA and audio formats supporting ID3v2 information.)中,PC端有一些工具可以通过python脚本做处理,但是在Android端就很难找到现有的工具使用了。
一次偶然的机会,看到了Exiv2这个开源工具,能够支持XMP的读写,更可贵的是,最新版上已经默认支持google 360 metadata。
Exiv2是C++编写,支持交叉编译,在Ubuntu、Linux、Windows都可以直接下载编译好的版本进行使用。如果需要在Android端使用,就需要基于源码进行单独编译。
编译环境
- Android NDK
- Ubuntu 16.04 LTS
- Exiv2 V0.26, 请下载trunk上的完整代码。http://www.exiv2.org/download.html
- Expat V2.2.2。 https://libexpat.github.io/
安装独立工具链
您可以独立使用 Android NDK 附带的工具链,或将其作为插件与现有 IDE 结合使用。 如果您已有自己的构建系统,且仅需要调用交叉编译器功能以将对构建系统的支持添加到 Android,则这种灵活性非常有用。 —— [ Android Developer ]
安装命令如下:
./make-standalone-toolchain.sh --platform=android-21 --install-dir=~/my-android-toolchain --ndk-dir='${yourNdkPath}' --toolchain=arm-linux-androideabi-4.9
需要注意的是,Exiv2如果使用低于android-21的platform进行编译,会报crwimage.cpp中某个方法无法找到的错误。
安装独立工具链的好处是将编译所需要的所有文件都拷贝到一个文件夹下,能够在编译过程中更好的link到依赖的头文件和库文件。
编译Expat
Expat是一个用C语言开发的、用来解析XML文档的开发库,它最初是开源的、Mozilla 项目下的一个XML解析器。 —— [ 百度百科]
如文章开头所述,图片的XMP信息是基于xml的ÿ