一、前言
最近在调研图片的元数据读写方案,需要了解 XMP 空间以及如何在 XMP 空间中读写元数据,本文做一个相关内容的记录。
XMP-Toolkit-SDK 以及 XMP标准简介
XMP-Toolkit-SDK 是 Adobe 提供的一套开源软件开发工具包(SDK),用于创建、读取、修改、序列化和操作 XMP(eXtensible Metadata Platform)元数据。XMP 是一种标准,用于在多种文件格式(如 JPEG、TIFF、PDF、RAW 图像等)中嵌入描述性元数据,比如作者名、版权信息、GPS 坐标、拍摄设置等。
主要用途:
- 解析和生成 XMP 元数据:方便地从支持 XMP 的文件中读取或写入元数据。
- 元数据管理:集成到各种工作流中(如数字资产管理、图片管理系统)。
- 跨平台支持:SDK 支持多平台,包括 Windows、macOS 和 Linux。
二、编译
本章介绍如何在不同平台下编译 XMP-Toolkit-SDK
2.1 准备工作
首先需要下载 XMP-Toolkit-SDK 源代码,直接 git clone 即可
git clone git@github.com:adobe/XMP-Toolkit-SDK.git
然后将三方库的编译文件准备好,需要用到的三方库包括 expat 和 zlib。
首先是 expat,步骤如下:
- 到 http://sourceforge.net/projects/expat/files/expat/2.5.0/ 或者在 libexpat-github 下载源码
- 接着将 lib 文件下整个拷贝至
XMP-Toolkit-SDK/third-party/expat
下即可,目录树如下:
.
├── expat
│ ├── ReadMe.txt
│ └── lib
接着是 zlib,步骤如下:
- zlib 主页中有源码下载链接 https://www.zlib.net/zlib-1.3.1.tar.gz,下载它,解压它
- 将所有 .h 和 .c 拷贝至
XMP-Toolkit-SDK/third-party/zlib
即可
cp *.c /pathto/XMP-Toolkit-SDK/third-party/zlib
cp *.h /pathto/XMP-Toolkit-SDK/third-party/zlib
2.2 不同平台编译
这部分在 XMPAddendumProgrammersGuide.pdf 57 页有很详细的描述。我实际编译下来发现有些平台按照文档编译会出现错误,这边也记录下我是如何修改的。
2.2.1 Mac 平台
运行 GenerateXMPToolkitSDK_mac.sh,输入选项生成不同目标的 xcode 工程
bash GenerateXMPToolkitSDK_mac.shGenerateXMPToolkitSDK_mac.sh: line 13: cd: GenerateXMPToolkitSDK_mac.sh: Not a directory
1. Clean All
2. Generate XMPToolkitSDK Dynamic 64
3. Generate XMPToolkitSDK Static 64
4. Generate XMPToolkitSDK Static iOS
5. Generate XMPToolkitSDK Dynamic iOS
6. Generate All
Enter your choice:
使用 xcode 打开工程文件,编译即可。注意,如果提示编译 sdk 找不到,可以在 XMP-Toolkit-SDK/build/shared/ToolchainLLVM.cmake
修改 XMP_OSX_SDK
为本机 sdk 版本。
2.2.2 Android 平台
Android 平台编译按照文档来做发现编译失败,后面对编译脚本稍作修改后运行成功。首先修改 GenerateAndBuildXMPToolkitSDK_android.sh 做如下修改:
- 54 行,
Android Gradle - Ninja
修改为Ninja
- 71 行,TOOLCHAIN 修改为
TOOLCHAIN="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake"
- 72 行,cmake_ndkpath 修改为
cmake_ndkpath=${ANDROID_NDK_HOME}
接着,添加软连接到 tools/android
目录下
cd XMP-Toolkit-SDK/tools/android
ln -s ~/Library/Android/sdk/cmake/3.22.1/bin/cmake
ln -s ~/Library/Android/sdk/cmake/3.22.1/bin/ninja
最后,设置 ANDROID_NDK_HOME
后运行脚本 GenerateAndBuildXMPToolkitSDK_android.sh 即可
export ANDROID_NDK_HOME=/Users/user/Library/Android/sdk/ndk/21.1.6352462
bash GenerateAndBuildXMPToolkitSDK_android.sh
三、编译示例程序
XMP-Toolkit-SDK 中提供了多个示例程序,编译它们也很简单,以 mac 平台为例,运行 XMP-Toolkit-SDK/samples/build/GenerateSamples_mac.sh
即可。注意,需要修改脚本中一些变量,以便编译成功。修改如下:
- 15 行,CMAKE 变量修改为你本机的 cmake 路径
- 121 行,TOOLCHAIN 变量修改为
XMP-Toolkit-SDK/build/shared/ToolchainLLVM.cmake
即可
运行脚本结束后,在同目录的会生成 xcode
目录,里头有工程文件,打开即可。
参考
- https://github.com/adobe/XMP-Toolkit-SDK
- XMPAddendumProgrammersGuide.pdf