ImageMagick convert 退出状态码为133。

5
我正在使用ImageMagick的convert工具在我的Mac OS X上运行的Java程序中转换图像。 我使用了以下代码,该代码是我从这里改编而来的。
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

编辑:好的,事实证明我之前遇到的错误是因为Java无法读取DYLD_LIBRARY_PATH环境变量。所以我重新启动了Eclipse,一切正常了。

3个回答

4

3

虽然我没有找到关于133返回码的任何信息,但我注意到您没有读取命令标准输出/标准错误流。建议您阅读一下以查看ImageMagick是否提供了更多有用的输出。这里有一个问题(链接),涉及Runtime.exec()方法的更复杂用例,但最好的基本方法是使用此方法


哇,那太有道理了,真不敢相信我没想到。谢谢!我今天会试试的。 - DanielGibbs

0
你应该考虑使用jmagick,它提供了一个Java API来访问本地的imagemagick库。这比从你的Java应用程序中生成新进程更有效率。

我曾经考虑过这个选项,但我在某个地方读到,如果我不会经常使用ImageMagick(在我的情况下,只有一个或两个转换命令),那么用这种方法会更容易些。 - DanielGibbs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接