2011-02-10 6 views
5

ImageMagick의 변환 도구를 사용하여 Mac OS X에서 실행되는 Java 프로그램 내에서 이미지를 변환하려고합니다. here에서 수정 한 다음 코드를 사용하고 있습니다. 나는이 작업을 수행 할 때ImageMagick 종료 상태로 변환 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."); 
} 

그러나, 나는 133의 종료 상태와 아래의 오류 메시지가 표시됩니다. 터미널과 같은 명령을 실행할 때 권한이있는 것과 관련이 있다고 가정합니다.

오류 메시지 :

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 

편집 : 좋아, 그래서 내가 인해 자바는 DYLD_LIBRARY_PATH 환경 변수를 볼 수없는에 위의 오류 메시지가 표시 한 것으로 나타났다. 그래서 Eclipse를 다시 시작했고 모든 것이 잘 돌아갔습니다.

답변

3

반환 코드 133 개를 찾을 수는 없지만 명령 표준 출력 스트림을 읽지는 않습니다. 나는 ImageMagick이 당신에게 좀 더 유용한 결과를주고 있는지보기 위해 그것을 읽으라고 권하고 싶다. Runtime.exec() 메소드의보다 복잡한 사용 사례를 다루는 질문이 here이지만 가장 기본적인 방법은 with this method입니다.

+0

와우, 그건 완벽하게 이해가된다. 믿을 수 없다. 고맙습니다! 나는 그것을 오늘 시도 할 것이다. – DanielGibbs

+0

아 하! 이제 오류 메시지가 나타납니다! 위의 업데이트. – DanielGibbs

0

네이티브 imagemagick 라이브러리에 Java API를 제공하는 jmagick을 사용해야합니다. Java 애플리케이션에서 새 프로세스를 생성하는 것보다 효율적입니다. > + SIGTRAP

http://tldp.org/LDP/abs/html/exitcodes.html 참조 = 128 + 5 = <

+0

그 점을 고려했는데, ImageMagick을 많이 사용하지 않으면 (내 경우에는 하나 또는 두 개의 명령 만 변환합니다) 다음과 같이하면 쉽게 읽을 수 있습니다. – DanielGibbs

4

반환 코드 (133)는 신호에 의해 종료되고 출력이 "-l 죽이는".