OS X 응용 프로그램을 개발 중이며 ImageMagick을 사용하여 이미지 조작을하고 싶습니다. CLI ImageMagick 유틸리티가 작동하려면 몇 가지 환경 변수가 필요합니다. ImageMagick 도구 모음을 내 응용 프로그램과 함께 묶어 내 코드에서 사용할 수 있습니까?OS X 응용 프로그램과 번들 ImageMagick 라이브러리?
7
A
답변
10
그래서 여기 내 솔루션입니다. 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는 사용자 지정 환경 변수를 허용합니다.
내가 내 프로젝트와 OS X binary 버전을 번들로 제공하고, 바이너리를 호출하는 NSTask를 사용 :관련 문제
- 1. 응용 프로그램과 함께 MySQL 번들
- 2. Xcode의 응용 프로그램과 함께 번들 프레임 워크
- 3. OS X 응용 프로그램 번들 내에서 심볼릭 링크 사용
- 4. Mac OS X 10.6 용 정규식 라이브러리
- 5. os x
- 6. Imagemagick jpeg decode delegate with OS X homebrew install
- 7. 응용 프로그램 번들의 동적 라이브러리 Mac OS X
- 8. GL 라이브러리 컴파일 질문 OS X
- 9. Mac OS X 용 토킹 헤드 라이브러리
- 10. OS X 응용 프로그램의 CGImageRef?
- 11. 맥 OS X 응용 프로그램
- 12. Silverlight 응용 프로그램과 클래스 라이브러리 프로젝트
- 13. TCSH에있는 응용 프로그램과 같은 폴더에있는 공유 라이브러리
- 14. OS X Server Lion
- 15. Mac OS X 환경 설정 창 응용 프로그램과 php5 웹 응용 프로그램 사이의 통신
- 16. OS X Lion의 권한 질문
- 17. OS X 프로세스 컨트롤
- 18. 루비 배경 OS X 용 응용 프로그램
- 19. OS X 응용 프로그램에 대한 경고
- 20. Mac OS X 응용 프로그램이 있는지 확인하십시오.
- 21. Mac OS X 개발
- 22. IntelliJ OS X 서비스
- 23. iPhone 응용 프로그램과 데스크톱 응용 프로그램 동기화 옵션
- 24. 잘못된 JPEG 라이브러리 - ruby on rails - OS X
- 25. 터미널을 통해 OS X 컴퓨터에 새 라이브러리 설치
- 26. Xcode 4 다운로드 Mac OS X 10.6 코어 라이브러리?
- 27. OS X 런타임 링커가 잘못된 라이브러리 버전을 찾음
- 28. Java 데스크톱 응용 프로그램에서 Mac OS X 기본 인쇄
- 29. Mac OS X 응용 프로그램 모달 창이 닫히지 않음
- 30. zxing 코드를 응용 프로그램과 통합하고 Android os 1.5 이상에 설치하십시오.
:-) 노력하고 있습니다 같은 일을하는 것. 도움이 될 것입니다. AFAIK ImageMagick은 절대 경로 만 지원하므로 경로에 tild를 사용할 수 없습니다. 그래서 NSTask는 작동하지만 애플을 설치 한 모든 HD의 "/"영역에 호환되는 ImageMagick 라이브러리를 넣으려고 애썼다. API가 있습니다 MagickWand MagickCore PerlMagick Magick ++,하지만 사과를 아직 못 알아 냈습니다! – markhunte
NSTask가 환경 변수를 허용한다는 것을 알지 못했습니다 ... 나는이 작업을 할 수있을 것입니다 :) 해결책을 찾으면 여기에 게시 할 것입니다. – Nippysaurus
ImageMagick이 dylib를 빌드하는 경우, DYLD_ * 환경 변수를 전달하는 트릭이있을 수 있습니다. 그러나 임베디드를 지원하기 위해 ImageMagick 바이너리와 라이브러리를 재구성하는 것이 훨씬 낫습니다. 나는 그것이 전에 행해졌다는 것을 알고있다. 그러나 나는 세부를 가지지 않고있다. Google이 도울 수 있다고 확신합니다. – bbum