Estoy desarrollando una aplicación OS X y me gustaría usar ImageMagick para manipular la imagen. Me he dado cuenta de que las utilidades CLI ImageMagick requieren algunas variables de entorno para funcionar. ¿Es posible agrupar el conjunto de herramientas de ImageMagick con mi aplicación y usarlas en mi código?Paquete de la biblioteca ImageMagick con la aplicación OS X?
Respuesta
Así que aquí está mi solución:
me lían la liberación OS X binary con mi proyecto, y utilizaron un NSTask llamar a los binarios. Debe especificar las variables de entorno "MAGICK_HOME" y "DYLD_LIBRARY_PATH" para que NSTask funcione correctamente. Aquí hay un fragmento de lo que estoy usando.
Tenga en cuenta que este ejemplo está codificado para usar el comando "compuesto" ... y usa argumentos codificados, pero puede cambiarlo a lo que quiera ... solo sirve como una prueba de concepto.
-(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];
}
Esta solución lía la mayor parte de toda la biblioteca con su liberación (37MB por el momento), por lo que podría ser menos que ideal para algunas soluciones, pero está trabajando :-)
¿Posible? Sí. Muchas aplicaciones lo han hecho, pero puede ser tedioso.
NSTask permite variables de entorno personalizadas.
- 1. TClientDataset en la aplicación OS X Firemonkey
- 2. ¿Paquete Ruby a una aplicación independiente Mac OS X?
- 3. Imagemagick jpeg delegado de decodificación que falta con la instalación de OS X Homebrew
- 4. ¿Dónde está la biblioteca C estándar en Mac OS X?
- 5. Biblioteca para aplicaciones iOS y OS X?
- 6. ¿Error al generar la aplicación OS X de 32 bits?
- 7. Arquitectura de la aplicación Cocoa en Mac OS X
- 8. Instalación de RMagick en Mac OS X con MacPorts
- 9. ¿Cómo paquete una aplicación Mac OS para la instalación?
- 10. ¿Puede una aplicación Mac OS X evitar que dlopen cargue una biblioteca?
- 11. Obtención de la ruta a los usuarios Carpeta de la biblioteca en OS X
- 12. Instalación de ImageMagick Brew con módulo PHP en Mac OS X
- 13. Desinstalador para el paquete en Mac OS X
- 14. Escalar Privilegios de aplicación programáticamente OS X
- 15. ¿Eliminar la tienda CoreData en OS X?
- 16. GKSession con Mac OS X
- 17. ¿Cómo puedo determinar la arquitectura de destino de la biblioteca estática (.a) en Mac OS X?
- 18. Cómo cambiar el ejecutable en un paquete de aplicación OS X
- 19. Mac OS X - aplicación sin menú?
- 20. clang_complete con OS X marcos
- 21. Maven, JAVA_HOME con OS X
- 22. ¿Cómo uso la fuente Arial con Gamba en OS X?
- 23. ¿Cómo configuro el ícono para el paquete de aplicaciones Mac OS X de mi aplicación?
- 24. Comprueba si hay una aplicación Mac OS X
- 25. Java/OS X Lion: configuración del nombre de la aplicación dejó de funcionar con JDK1.7
- 26. ¿Cómo activar la aplicación Mac OS X con una ID de proceso determinada?
- 27. sem_init en OS X
- 28. Seguridad de subprocesos de la biblioteca estándar de C en OS X
- 29. Decisiones de diseño de OS X. ¿Cerrar la aplicación en la última ventana cerrada?
- 30. Instalación de la biblioteca Subversion de JavaHL en Mac OS X
Busco para hacer lo mismo Cualquier ayuda sería buena AFAIK ImageMagick solo admite rutas absolutas, por lo que no puede usar, por ejemplo, tilds en la ruta de acceso a ella. Entonces, aunque NSTask funciona, solo he sido útil para colocar las bibliotecas compiladas de ImageMagick en el área "/" de cualquier HD en el que instale la aplicación. Hay APIs MagickWand MagickCore PerlMagick Magick ++, ¡Pero todavía no he aprendido a descifrarlas! – markhunte
No sabía que NSTask permitía variables de entorno ... Podría hacer que esto funcione :) Si encuentro una solución, la publicaré aquí. – Nippysaurus
Si ImageMagick construye dylibs, un truco podría ser pasar las variables de entorno DYLD_ *. Sin embargo, sería mucho mejor reconstruir los binarios y las bibliotecas de ImageMagick para admitir la incrustación. Sé que ya se ha hecho antes, pero no tengo detalles. Google puede ayudar, estoy seguro. – bbum