Embed XMP data to PNG with Objective-C

僤鯓⒐⒋嵵緔 提交于 2020-01-13 12:15:09

问题


I need to embed a custom XMP file to a PNG in a iOS app. Until now, what I was able to do is to compile the Adobe XMP toolkit, that generated an Xcode project, then I compiled the project correctly.

From there I don't know how to use the library in my Xcode project and how to use it. I've found very little info about this on the Internet.

Anyone who did the same wishing to help?


回答1:


If you downloaded the Adobe XMP Toolkit SDK, you can find an example of writing the XMP metadata in "ModifyingXMP.cpp" and an example of reading the already XMP-written file in "ReadingXMP.cpp" file. Note that I am using XMP-Toolkit-SDK-CC201607 version.

You need static files and header files to be included in your iOS project later. Read the instructions carefully on how to generate them, specifically on what kind of archs you need. In my case, I generated [arm64, armv7, armv7s] and [x86_64] separately and then lipo them together later.

Try and modify "ModifyingXMP.cpp" according to what you need. Include these source codes into your iOS app project as Objective-C++ (with .mm extension). Don't forget to include the header file, libXMPCoreStatic.a file, libXMPFilesStatic.a file, make a bridging header, and configure your project to import external static libs. If you don't understand what I am talking about, check these links:

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

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

Here is what it looks like in my demo project:

My implementation on 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

In my XmpWriter.mm file, I modify the createXMPFromRDF() to accept my parameters like:

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

I hope you can get closer to what you want to achieve from here.




回答2:


The iOS build support shown in the XMP specification PDF shows this was added in July 2016, but that indicates support for Xcode 7.2.1, so it's possible this library just won't work in Xcode 9, as it's not clear it's been updated anytime recently.

As far as a more concrete method of using the XMP sample project you generated, from the documentation linked above you should be able to find a ReadingXMP demo, which should be platform specific (so helpful for you in Xcode). The doc states that this demo will

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

You'll need to compile and build them in command line, from <xmpsdk>/samples/source, and will be written to <xmpsdk>/samples/target/. I think filename specified will be the Xcode project the SDK generated, but as you've noticed there's not much documentation there.

I honestly haven't used it myself, but I'm hoping this will help a little :).




回答3:


I faced a similar problem with needing to read/write XMP data, and ended up creating an Objective-C wrapper over Adobe's XMP ToolKit as an alternative for a more natural API.

I hope it'll come in handy for someone, you could find it on Github & CocoaPods: https://github.com/IHEARTCOOKIES/XMPFramework



来源:https://stackoverflow.com/questions/47788353/embed-xmp-data-to-png-with-objective-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!