使用 Objective-C 将 XMP 数据嵌入到 PNG

Embed XMP data to PNG with Objective-C

我需要在 iOS 应用程序中将自定义 XMP 文件嵌入到 PNG 中。 到目前为止,我能做的是编译 Adob​​e XMP 工具包,生成一个 Xcode 项目,然后我正确地编译了该项目。

从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它。我在 Internet 上找到的这方面的信息很少。

有同样的人愿意帮忙吗?

XMP specification PDF 中显示的 iOS 构建支持显示这是在 2016 年 7 月添加的,但这表明支持 Xcode 7.2.1,所以这个库可能刚刚获胜在 Xcode 9 中无法使用,因为不清楚最近是否有更新。

至于使用您生成的 XMP 示例项目的更具体方法,从上面链接的文档中您应该能够找到一个 ReadingXMP 演示,它应该是特定于平台的(对您很有帮助Xcode)。文档指出此演示将

Demonstrates the basic use of the XMPFiles and XMPCore components, obtaining read-only XMP from a file and examining it through the XMP object.

您需要在命令行中编译和构建它们,从 <xmpsdk>/samples/source,并将写入 <xmpsdk>/samples/target/。我 认为 filename 指定将是 SDK 生成的 Xcode 项目,但正如您所注意到的那样,那里没有太多文档。

老实说,我自己还没有使用过它,但我希望这会有所帮助:)。

如果您下载了 Adob​​e XMP Toolkit SDK,您可以在 "ModifyingXMP.cpp" 中找到写入 XMP 元数据的示例,在 "ReadingXMP.cpp" 文件中找到读取已写入 XMP 文件的示例。注意我用的是XMP-Toolkit-SDK-CC201607版本

您稍后需要将静态文件和头文件包含在您的 iOS 项目中。仔细阅读有关如何生成它们的说明,特别是关于您需要哪种拱门的说明。在我的例子中,我分别生成了 [arm64、armv7、armv7s] 和 [x86_64],然后再将它们一起 lipo。

尝试根据需要修改"ModifyingXMP.cpp"。将这些源代码作为 Objective-C++(扩展名为 .mm)包含到您的 iOS 应用程序项目中。不要忘记包含头文件、libXMPCoreStatic.a 文件、libXMPFilesStatic.a 文件,制作一个桥接头文件,并配置您的项目以导入外部静态库。如果您不明白我在说什么,请查看这些链接:

https://forums.adobe.com/thread/1360320

How can I use an .a static library in swift?

这是我的演示项目中的样子:

我在 XmpWriter.h 上的实施:

#import <Foundation/Foundation.h>

@interface XmpWriter : NSObject

+(BOOL) writeXmp:(const char *) imageUrl Param1:(const char *) Param1 Param2:(float) param2 Param3:(float) Param3;
+(BOOL) readXmp:(const char *) imageUrl;

@end

在我的 XmpWriter.mm 文件中,我修改了 createXMPFromRDF() 以接受我的参数,例如:

SXMPMeta createXMPFromRDF(const char *Param1, float Param2, float Param3)

希望你能从这里更接近你想要达到的目标。

我遇到了需要 read/write XMP 数据的类似问题,最终在 Adob​​e 的 XMP 工具包上创建了一个 Objective-C 包装器作为更自然 API 的替代方案。 =11=]

我希望它对某些人有用,您可以在 Github 和 CocoaPods 上找到它: https://github.com/IHEARTCOOKIES/XMPFramework