【问题标题】:Embed XMP data to PNG with Objective-C使用 Objective-C 将 XMP 数据嵌入 PNG
【发布时间】:2017-12-13 08:15:56
【问题描述】:

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

从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它。我在 Internet 上找到的关于此的信息非常少。

有谁愿意帮忙吗?

【问题讨论】:

标签: ios objective-c xcode xmp


【解决方案1】:

如果您下载了 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)

我希望你能从这里更接近你想要实现的目标。

【讨论】:

  • 嗨,凯文,非常感谢您的帮助。昨天我被困在库的编译上,因为我没有将库“lipo”在一起,而且编译时出错。现在我这样做了,我只有与您的项目中相同的两个库,但我收到编译错误“-lXMPCoreStatic 找不到库”。不知道如何解决这个问题,因为它在构建设置中似乎都是正确的......
  • 1.请使用“lipo -info”确认您获得了所需的所有架构。 2. 转到“构建设置”并仔细检查您的“库搜索路径”。你应该把你的库路径放在那里。
  • lipo -info 给了我这个输出:MacBook-Pro-de-Michele:ios mike$ lipo -info libXMPCoreStatic.a Architectures in the fat file: libXMPCoreStatic.a are: armv7 i386 x86_64 arm64 MacBook-Pro-de-Michele:ios mike$ lipo -info libXMPFilesStatic.a Architectures in the fat file: libXMPFilesStatic.a are: armv7 i386 x86_64 arm64。在库搜索路径中,我只有 $inherith 和 $(PROJECT_DIR)。
  • 好的,最后我已经能够用这两个库编译项目并添加“include”文件夹。现在我将尝试修改“ModifyingXMP.cpp”文件。
  • 好像你的静态库没有正确构建。转到构建设置,找到“C++ 标准库”并添加“libc++(支持 c++11)”。如果这不能解决您的问题,请更仔细地阅读 XmpToolkit 文档,尤其是“XMPProgrammersGuide.pdf”。您可以尝试在 Google 上搜索有关您的具体问题的更多信息。我很久以前就这样做了,我不记得具体的一些细节。 linklink
【解决方案2】:

XMP specification PDF 中显示的 iOS 构建支持表明这是在 2016 年 7 月添加的,但这表明支持 Xcode 7.2.1,因此该库可能无法在 Xcode 9 中运行,因为目前尚不清楚最近随时更新。

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

演示 XMPFiles 和 XMPCore 组件的基本使用,从文件中获取只读 XMP 并通过 XMP 对象对其进行检查。

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

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

【讨论】:

    【解决方案3】:

    我在需要读取/写入 XMP 数据时遇到了类似的问题,并最终在 Adob​​e 的 XMP ToolKit 上创建了一个 Objective-C 包装器,作为更自然 API 的替代方案。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2014-02-14
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多