1

我在我的应用程序中使用 imagemagick。我们的开发机器是 Windows,实时服务器是 linux。现在,在网上,它在网上工作得很好。但不在开发机器中。我下载并安装了适用于 Windows 的 Imagemagick 最新版本,当我在 DOS 提示符下尝试以下命令时,它工作正常。

convert -sample 100x100 D:\test.jpg D:\test-cropped.jpg

但是当我在 Java 程序中运行与命令行相同的命令时,它不工作并且也没有给出任何错误。我的代码是:

Runtime.getRuntime().exec("convert -sample 250x150 "+pathName+digest+".jpg "+pathName+digest+"_thumb.jpg");

任何帮助都会显现。

4

4 回答 4

1

convert.exe在 ImageMagick 安装目录中可用。所以需要在环境变量中添加 ImageMagick 安装目录path

另一种选择是提供convert.exeas 的完整路径:

Runtime.getRuntime().exec("C:\\program files\\ImageMagick\\convert -sample 250x150 "+pathName+digest+".jpg "+pathName+digest+"_thumb.jpg");
于 2012-10-17T10:02:24.380 回答
0

我怀疑问题是路径名中的空格,但解决方案不是使用转义符或引号。该exec(String)方法通过查找空格以完全幼稚的方式将字符串拆分为“参数”。它不注意引用等。相反,您最终会得到包含引号字符等的命令名称和参数。

解决方案是使用exec需要 a的重载String[],并自己拆分参数;例如

    Runtime.getRuntime().exec(new String[]{
         "convert", // or "D:\\Program Files (x86)\\ImageMagick-6.8.0-Q16\\convert\\"
         "-sample", 
         "250x150", 
         pathName + digest + ".jpg",
         pathName + digest + "_thumb.jpg"
    });

您可以做的另一件事是捕获并打印写入进程 stdout 和 stderr 的任何输出。

于 2012-10-17T11:02:53.137 回答
0

尝试

  • convert使用绝对路径执行
  • 引用您的参数input fileand output file,以防它们包含空格
于 2012-10-17T10:02:20.150 回答
0

在我的情况下,我从 javacompare命令面临的问题是使用 Runtime.getRuntime().exec() 工作正常,但是在使用时convert,它不起作用并将退出值返回为 4。
Compare执行返回退出值 0,告诉它已成功执行。
我已经system path更新了 ImageMagic 的安装目录,但它仍然没有选择“转换”exe 文件。所以,我开始给出 convert.exe 文件的完整路径,而不是只写convert
eg :,Runtime.getRuntime().exec("C:/Program files/ImageMagic......../convert.exe myImage1 -draw .... myImage2")这次它工作得很好。
一些系统无法选择convert应用程序并给出完整路径将其整理出来。可能这个解决方案会帮助面临相同类型问题的人。

于 2014-07-25T04:38:00.280 回答