Встраивание данных XMP в PNG с помощью Objective-C

Мне нужно встроить пользовательский файл XMP в PNG в приложении iOS. До сих пор мне удавалось скомпилировать набор инструментов Adobe XMP, который сгенерировал проект Xcode, после чего я правильно скомпилировал проект.

Оттуда я не знаю, как использовать библиотеку в моем проекте Xcode и как ее использовать. Я нашел очень мало информации об этом в Интернете.

Кто делал так же желающий помочь?


person Aleph72    schedule 13.12.2017    source источник
comment
Возможно, это поможет: stackoverflow.com/questions/4148140/   -  person Faysal Ahmed    schedule 13.12.2017
comment
@FaysalAhmed, эта ссылка помогла мне оказаться там, где я сейчас. Но все равно спасибо.   -  person Aleph72    schedule 13.12.2017


Ответы (3)


Если вы загрузили SDK Adobe XMP Toolkit, вы можете найти пример записи метаданных XMP в «ModifyingXMP.cpp» и пример чтения уже записанного файла XMP в файле «ReadingXMP.cpp». Обратите внимание, что я использую версию XMP-Toolkit-SDK-CC201607.

Вам потребуются статические файлы и файлы заголовков, чтобы позже включить их в проект iOS. Внимательно прочитайте инструкции о том, как их создавать, особенно о том, какие арки вам нужны. В моем случае я сгенерировал [arm64, armv7, armv7s] и [x86_64] по отдельности, а затем позже липолизовал их вместе.

Попробуйте изменить «ModifyingXMP.cpp» в соответствии с тем, что вам нужно. Включите эти исходные коды в свой проект приложения iOS как Objective-C++ (с расширением .mm). Не забудьте включить файл заголовка, файл libXMPCoreStatic.a, файл libXMPFilesStatic.a, сделать соединительный заголовок и настроить проект для импорта внешних статических библиотек. Если вы не понимаете, о чем я говорю, проверьте эти ссылки:

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

Как я могу использовать статическую библиотеку .a в 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)

Я надеюсь, что вы сможете приблизиться к тому, чего хотите достичь отсюда.

person Kevin    schedule 03.01.2018
comment
Привет, Кевин, большое спасибо за помощь. Вчера я застрял на компиляции библиотек, потому что я не собрал библиотеки вместе, и у меня были ошибки при компиляции. Теперь я сделал это, и у меня есть только те же две библиотеки, что и в вашем проекте, но я получаю библиотеку ошибок компиляции, не найденную для -lXMPCoreStatic. Не знаю, как это решить, так как в настройках сборки все вроде правильно... - person Aleph72; 03.01.2018
comment
1. Пожалуйста, подтвердите с помощью lipo-info, что вы получили всю необходимую архитектуру. 2. Перейдите в «Настройки сборки» и дважды проверьте «Пути поиска в библиотеке». Вы должны указать свой путь к библиотекам. - person Kevin; 03.01.2018
comment
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). - person Aleph72; 03.01.2018
comment
Хорошо, в конце концов я смог скомпилировать проект с двумя библиотеками и добавить включаемую папку. Сейчас попробую модифицировать файл ModifyingXMP.cpp. - person Aleph72; 03.01.2018
comment
Я добавил файлы XmpWriter.mm и .h (не изменяя createXMPFromRDF()) и попытался собрать. Я получаю 192 ошибки этого типа: Undefined symbols for architecture x86_64: "std::string::_S_empty_rep()", referenced from: char* std::string::_S_construct<__gnu_cxx::__normal_iterator<char const*, std::string> >(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<char> const&, std::forward_iterator_tag) in libXMPFilesStatic.a(TimeConversionUtils.o). Любая идея? - person Aleph72; 03.01.2018
comment
Похоже, ваши статические библиотеки не были собраны должным образом. Перейдите в настройки сборки, найдите стандартную библиотеку C++ и добавьте libc++ (с поддержкой c++11). Если это не решит вашу проблему, внимательно прочитайте документацию XmpToolkit, особенно XMPProgrammersGuide.pdf. Вы можете попытаться узнать больше о вашей конкретной проблеме в Google. Делал это давно и уже не помню некоторых подробностей. ссылка ссылка - person Kevin; 04.01.2018

Поддержка сборки iOS показана в PDF спецификации XMP показывает, что это было добавлено в июле 2016 года, но это указывает на поддержку Xcode 7.2.1, поэтому, возможно, эта библиотека просто не будет работать в Xcode 9, так как неясно, обновлялся ли он в последнее время.

Что касается более конкретного метода использования созданного вами примера проекта XMP, из документации, указанной выше, вы сможете найти демонстрацию ReadingXMP, которая должна быть специфичной для платформы (так полезно для вас в Xcode). В документе указано, что эта демонстрация будет

Демонстрирует базовое использование компонентов XMPFiles и XMPCore, получение XMP только для чтения из файла и его проверку с помощью объекта XMP.

Вам нужно будет скомпилировать и собрать их в командной строке из <xmpsdk>/samples/source, и они будут записаны в <xmpsdk>/samples/target/. Я думаю, что указанный filename будет проектом Xcode, сгенерированным SDK, но, как вы заметили, там не так много документации.

Честно говоря, я сам не использовал его, но я надеюсь, что это немного поможет :).

person BHendricks    schedule 30.12.2017

Я столкнулся с аналогичной проблемой, связанной с необходимостью чтения/записи данных XMP, и в итоге создал оболочку Objective-C поверх Adobe XMP ToolKit в качестве альтернативы более естественному API.

Надеюсь, кому-нибудь пригодится, вы можете найти его на Github и CocoaPods: https://github.com/IHEARTCOOKIES/XMPFramework

person COOKIES    schedule 03.11.2019