私はOS Xアプリケーションを開発しており、ImageMagickを使用して画像操作をしたいと考えています。私は、CLI ImageMagickユーティリティが動作するためにいくつかの環境変数を必要としていることに気付きました。 ImageMagickツールスイートをアプリケーションにバンドルして、自分のコードで使用することは可能ですか?OS X AppをバンドルしたImageMagickライブラリ?
7
A
答えて
10
は私のソリューションです:
私は私のプロジェクトでOS X binaryリリースを同梱し、バイナリを呼び出すためにNSTaskを使用しました。 NSTaskが正しく機能するには、 "MAGICK_HOME"と "DYLD_LIBRARY_PATH"環境変数を指定する必要があります。ここに私が使っているもののスニペットがあります。
この例では、 "複合"コマンドを使用するようにハードコードされていますが、ハードコードされた引数を使用していますが、好きなものに変更できます。
-(id)init
{
if ([super init])
{
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
NSString* imageMagickPath = [bundlePath stringByAppendingPathComponent:@"/Contents/Resources/ImageMagick"];
NSString* imageMagickLibraryPath = [imageMagickPath stringByAppendingPathComponent:@"/lib"];
MAGICK_HOME = imageMagickPath;
DYLD_LIBRARY_PATH = imageMagickLibraryPath;
}
return self;
}
-(void)composite
{
NSTask *task = [[NSTask alloc] init];
// the ImageMagick library needs these two environment variables.
NSMutableDictionary* environment = [[NSMutableDictionary alloc] init];
[environment setValue:MAGICK_HOME forKey:@"MAGICK_HOME"];
[environment setValue:DYLD_LIBRARY_PATH forKey:@"DYLD_LIBRARY_PATH"];
// helper function from
// http://www.karelia.com/cocoa_legacy/Foundation_Categories/NSFileManager__Get_.m
NSString* pwd = [Helpers pathFromUserLibraryPath:@"MyApp"];
// executable binary path
NSString* exe = [MAGICK_HOME stringByAppendingPathComponent:@"/bin/composite"];
[task setEnvironment:environment];
[task setCurrentDirectoryPath:pwd]; // pwd
[task setLaunchPath:exe]; // the path to composite binary
// these are just example arguments
[task setArguments:[NSArray arrayWithObjects: @"-gravity", @"center", @"stupid hat.png", @"IDR663.gif", @"bla.png", nil]];
[task launch];
[task waitUntilExit];
}
は、このソリューションは、ご使用のリリース(現時点では37メガバイト)でライブラリ全体の大部分をバンドルし、それはいくつかのソリューションのための理想的な未満であるかもしれないが、それは私が探しています
2
可能ですか?はい。多くのアプリはそうしていますが、面倒なことがあります。
NSTaskでは、カスタム環境変数を使用できます。だからここ
関連する問題
- 1. ImageMagickとrmagick OS X 10.7
- 2. Windowsにソフトウェアをデプロイする際にMac OS X Appのバンドル
- 3. ImageMagick Mac OS XでPHPモジュールを使用したBrewインストール
- 4. OS XでC++ライブラリをインストール
- 5. OS XでQtアプリケーションをデプロイしたときに作成された非常に大きな.appバンドル
- 6. バンドルが無効ですMac OS X
- 7. OS Xでバンドルするためのヘルプが必要です
- 8. OS X:.appバンドル内のシェルスクリプトは、ドロップされたファイルやディレクトリを受け入れるべきです。
- 9. OS X Lionにqwtライブラリをインストール
- 10. Mac OS XにSubversion JavaHLライブラリをインストール
- 11. バンドルされたバンドルJSと外部ライブラリ
- 12. cmakeでビルドされたライブラリをMac OS Xにインストールする
- 13. Mac OS Xの.appにフォルダを追加します
- 14. Mac OS X上でAntを使って.appバンドルをコピーするにはどうすればよいですか?
- 15. OS X Javaの.appバンドルで他のアプリを開くことができません。
- 16. '宝石鋸山インストールは、' バンドルinstall` [Mac OS Xのライオン]
- 17. OS XとしてパッケージングするときのリクエストでのSSLError .app
- 18. OS X上のJava:.appパッケージにJVMバンドルが含まれていると "open"コマンドが実行されません。
- 19. OS X LionのRubymine 4:バンドルされたデータベースのサポートにアクセスするには?
- 20. Adobe Air Appでバンドルして.app/.exeファイルを実行する
- 21. OS Xアバターシステム
- 22. のMac OS X NodeJS:Macのポートを使用して、MAC OS X上
- 23. Qt4Dotnet on Mac OS X
- 24. Mac OS X:ファインダー+ App Sandboxでファイルを開く
- 25. OS Xアプリケーションの.app内にファイルを作成
- 26. Mac OS X 10.6でGoogle App Engine SDKを使用する
- 27. OS X
- 28. FreeTDS Mac OS X MiniPortile
- 29. OS XでのリンカエラーX
- 30. Mac OS Xで動的ライブラリ(libjvm.dylib)をリンクする(rpath問題)
:-)取り組んでいます同じことをする。 AFAIK ImageMagickは絶対パスのみをサポートしているので、パスへのパスにはティルドなどを使うことはできません。だからNSTaskは動作しますが、アプリケーションをインストールするHDの "/"領域に、遵守したImageMagickライブラリを置くためだけにリンゴを使用しています。 APIがありますMagickWand MagickCore PerlMagick Magick ++、しかし私は彼らをまだ理解していません! – markhunte
私は、NSTaskが環境変数に許されていることを知りませんでした...私はこの仕事をすることができるかもしれません:)解決策を見つけたら、ここに投稿します。 – Nippysaurus
ImageMagickがdylibを構築する場合、DYLD_ *環境変数を渡すことが1つのトリックかもしれません。しかし、埋め込みをサポートするためにImageMagickバイナリとライブラリを再構築するほうがはるかに良いでしょう。私はそれが以前に行われたことを知っていますが、私は詳細を持っていません。 Googleが助けることができる、私は確信しています。 – bbum