XMP-Toolkit-SDK 编译与示例程序

一、前言

最近在调研图片的元数据读写方案,需要了解 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 即可

bash 复制代码
git clone git@github.com:adobe/XMP-Toolkit-SDK.git

然后将三方库的编译文件准备好,需要用到的三方库包括 expat 和 zlib。

首先是 expat,步骤如下:

  1. 到 http://sourceforge.net/projects/expat/files/expat/2.5.0/ 或者在 libexpat-github 下载源码
  2. 接着将 lib 文件下整个拷贝至 XMP-Toolkit-SDK/third-party/expat 下即可,目录树如下:
bash 复制代码
.
├── expat
│   ├── ReadMe.txt
│   └── lib

接着是 zlib,步骤如下:

  1. zlib 主页中有源码下载链接 https://www.zlib.net/zlib-1.3.1.tar.gz,下载它,解压它
  2. 将所有 .h 和 .c 拷贝至 XMP-Toolkit-SDK/third-party/zlib 即可
bash 复制代码
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.sh

GenerateXMPToolkitSDK_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 做如下修改:

  1. 54 行,Android Gradle - Ninja 修改为 Ninja
  2. 71 行,TOOLCHAIN 修改为 TOOLCHAIN="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake"
  3. 72 行,cmake_ndkpath 修改为 cmake_ndkpath=${ANDROID_NDK_HOME}

接着,添加软连接到 tools/android 目录下

bash 复制代码
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 即可

bash 复制代码
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 即可。注意,需要修改脚本中一些变量,以便编译成功。修改如下:

  1. 15 行,CMAKE 变量修改为你本机的 cmake 路径
  2. 121 行,TOOLCHAIN 变量修改为 XMP-Toolkit-SDK/build/shared/ToolchainLLVM.cmake 即可

运行脚本结束后,在同目录的会生成 xcode 目录,里头有工程文件,打开即可。

参考

  1. https://github.com/adobe/XMP-Toolkit-SDK
  2. XMPAddendumProgrammersGuide.pdf
相关推荐
阿明副业观察1 小时前
AI视频创作流程怎么做?完整指南与工具推荐
大数据·人工智能·aigc·音视频·ai写作
aichitang20241 小时前
应用数学与音频信号处理
音视频·信号处理
可乐鸡翅yeah_3 小时前
hls.js 缓冲区参数 maxBufferLength、maxBufferSize 通俗讲解与业务调参
开发语言·javascript·ios·音视频·safari·m3u8
小宋10214 小时前
视频 RAG 从零实现:镜头切分、字幕对齐与时间段引用
人工智能·音视频
Dovis(誓平步青云)4 小时前
导览音频切换太快,旧讲解不能覆盖新展品
android·前端·javascript·ecmascript·音视频·宠物
归秋14221 小时前
多轨音频智能混音软件怎么选:从 demo 到更完整作品的 AI 后期工具思路
人工智能·音视频
小猴子爱上树1 天前
跨马翻译:批量图片翻译与视频字幕、智能抠图一站式在线图片翻译工具
大数据·人工智能·python·音视频
每天死循环1 天前
ComfyUI MiniMax H3文生视频(t2v)提示词教程:四段式写法+5秒768p实测(附模板和参数)
音视频·文生视频·comfyui·ai视频·minimax
企业数字化笔记1 天前
视频像素分割怎么选?HSV 阈值、传统掩膜、语义分割和实例分割的效果与代价
opencv·音视频
youdexiang1 天前
AI 生成会议纪要好用吗?多款 APP 功能分析
java·人工智能·音视频