gpt4 book ai didi

objective-c - 将 ImageMagick 库与 OS X 应用程序捆绑在一起?

转载 作者:太空狗 更新时间:2023-10-30 03:36:20 26 4
gpt4 key购买 nike

我正在开发一个 OS X 应用程序,并想使用 ImageMagick 进行一些图像处理。我注意到 CLI ImageMagick 实用程序需要一些环境变量才能工作。是否可以将 ImageMagick 工具套件与我的应用程序捆绑在一起并在我的代码中使用它们?

最佳答案

所以这是我的解决方案:

我捆绑了 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),因此对于某些解决方案而言它可能不太理想,但它正在运行 :-)

关于objective-c - 将 ImageMagick 库与 OS X 应用程序捆绑在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4773768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com