我正在開發一個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];
}
該解決方案捆綁散裝整個庫與您的版本(目前37MB),所以它可能是不太理想的一些解決方案,但它工作:-)
2
可能嗎?是。許多應用程序都這樣做了,但可能很乏味。
NSTask允許自定義環境變量。
相關問題
- 1. 在Xcode項目中捆綁.app文件OS X
- 2. OS X Lion上的Rubymine 4:如何訪問捆綁的數據庫支持?
- 3. 在Mac OS X中使用捆綁軟件安裝fusefs gem Lion
- 4. 需要幫助鏈接到捆綁在OS X上
- 5. 如何將Mono.exe轉換爲OS X捆綁包?
- 6. OS X Lion,ImageMagick和RMagic - 如何安裝?
- 7. Imagemagick停止在OS X Mavericks上工作
- 8. 如何在32位模式下在Mac OS X上運行捆綁到.app的java應用程序?
- 9. onCreate Android os捆綁從未使用
- 10. 添加到Qt項目內容的目錄作爲OS X捆綁資源
- 11. 爲什麼OS X捆綁包需要大約30秒才能打開?
- 12. ImageMagick的+可可應用程序在一個捆綁
- 13. 是否可以創建不是捆綁的Mac OS X gui應用程序?
- 14. 在Mac OS X上查找Core Data的sqlite數據庫app
- 15. 捆綁安裝路沿石上的寶石失敗 - 的Mac OS X 10.8.2
- 16. 捆綁更新和安裝OS X Lion的升級失敗後 - 的Rails 3
- 17. 輕鬆構建與MacPorts捆綁在一起的Mac OS X.appl
- 18. 用Ocra捆綁RMagick
- 19. '創業板安裝引入nokogiri' 在'捆綁install`失敗[Mac OS X的獅子]
- 20. RequireJS:帶插件的捆綁模塊
- 21. 帶XCode插件的捆綁框架
- 22. Mac OS X上的xutility庫
- 23. TCP庫是捆綁消息?
- 24. 在Mac OS X App Store上更新
- 25. Java將zip壓縮回.app(OS X)
- 26. Eclipse中無法在Mac OS X裝載的Java ImageMagick庫,如下圖所示10.11.4
- 27. App Store .app捆綁問題 - 我該如何解決它?
- 28. 是否可以在OS X上捆綁Mono運行時(不使用Xamarin)?
- 29. 使用捆綁安裝程序(Linux,OS X或Unix)安裝AWS CLI
- 30. 使用帶JavaFX 2(OS X)的32位Java庫
我要找做同樣的事情。任何幫助都是好的AFAIK ImageMagick只支持絕對路徑,所以你不能在路徑中使用例如tilds。因此,雖然NSTask可以工作,但我只是將蘋果公司的ImageMagick庫放在任何安裝應用程序的高清「/」區域。有APIs MagickWand MagickCore PerlMagick Magick ++,但我還沒有找到蘋果呢! – markhunte 2011-01-23 19:35:40