2011-02-10 7 views
5

Estoy utilizando la herramienta de conversión de ImageMagick para convertir imágenes desde mi programa Java que se ejecuta en Mac OS X. Estoy usando el siguiente código, que he adaptado de here.ImageMagick convertir estado de salida 133

public static void convertToJPG(String originalFile, String newFile) throws Exception { 
    executeCommand("/usr/local/ImageMagick-6.6.7/bin/convert", originalFile, newFile); 
} 

private static void executeCommand(String... command) throws Exception { 
    ProcessBuilder pb = new ProcessBuilder(command); 
    pb.redirectErrorStream(true); 
    Process p = pb.start(); 
    int exitStatus = p.waitFor(); 
    System.out.println(exitStatus); 
    if(exitStatus != 0) 
     throw new Exception("Error converting image."); 
} 

Sin embargo, cuando hago esto, me sale un estado de salida y el mensaje de error a continuación. Supongo que esto tiene algo que ver con los permisos, ya que cuando ejecuto el mismo comando desde la terminal, funciona bien.

mensaje de error:

dyld: Library not loaded: /ImageMagick-6.6.7/lib/libMagickCore.4.dylib 
    Referenced from: /usr/local/ImageMagick-6.6.7/bin/convert 
    Reason: image not found 

Editar: Ok, por lo que resulta que estaba recibiendo el mensaje de error anterior, debido a que Java no ser capaz de ver la variable DYLD_LIBRARY_PATH medio ambiente. Así que reinicié Eclipse y todo funcionó.

Respuesta

3

Si bien no pude encontrar nada sobre un código de retorno 133, me di cuenta de que no está leyendo el comando estándar de salida/flujo de error estándar. Sugiero leer eso para ver si ImageMagick te está dando un resultado más útil. Existe una pregunta here que trata casos de uso más complejos del método Runtime.exec(), pero la mejor manera básica de hacerlo es with this method.

+0

Guau, eso tiene mucho sentido, no puedo creer que no haya pensado en eso. ¡Gracias! Voy a intentar eso hoy. – DanielGibbs

+0

Ah-ha! ¡Ahora tengo un mensaje de error! Actualización arriba. – DanielGibbs

0

Debería considerar usar jmagick que proporciona una API de Java a las bibliotecas de imagemagick nativas. Es más eficiente que generar nuevos procesos desde tu aplicación Java.

+0

Lo consideré, pero leí en alguna parte que si no fuera a usar ImageMagick mucho (en mi caso, solo uno o dos comandos de conversión), entonces sería más fácil hacerlo de esta manera. – DanielGibbs

Cuestiones relacionadas