Java ProcessBuilder ImageMagic转换命令

时间:2016-06-11 20:34:15

标签: java imagemagick

我正在尝试从image magic运行convert命令,对于这两种情况,此命令都不起作用。

以下是我使用的代码:

sv 2

第一种情况我得到了以下输出,这与我使用im4java库时获得的响应相同。这就是为什么我决定先使用这些命令。

String command = String.format("convert \"%s\" -rotate %s \"%s\"", inputFileString, "" + degrees, outputFileString);
log.info(command);

ProcessBuilder pb = new ProcessBuilder("convert", inputFileString, "-rotate " + degrees, outputFileString);
Process p = pb.start();

第二种情况是我的档案中有空格:

2016-06-11 22:19:09 INFO - convert "C:\photo-gallery\photo-gallery-ui\portfolios\admin\test4\v\1465675527119.jpg" -rotate 90.0 "C:\photo-gallery\photo-gallery-ui\portfolios\admin\test4\v\1465676349249.jpg"
2016-06-11 22:19:09 ERROR - Invalid Parameter - -rotate

为什么我会获得invalida参数?我在日志中输出了信息,当我将其复制/粘贴到命令行时,命令会在两种情况下都通过。为什么我不能像输出那样使用这个命令?

1 个答案:

答案 0 :(得分:0)

问题实际上是调用convert会导致调用the Windows convert utility。此实用程序没有-rotate选项,这可以解释您的错误。在您的情况下,您需要使用cmd.exe /C生成一个新进程,以便设置包含ImageMagick PATH可执行文件路径的环境变量convert

要考虑的第二点是每个参数都应设置为ProcessBuilder的单独命令。将"-rotate 90"作为单个命令传递无效,您需要传递两个命令:"-rotate""90"

因此,ProcessBuilder的以下结构将按预期工作:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "convert", inputFileString, "-rotate", degrees, outputFileString);

例如,如果degrees不是String而是int,您仍然可以将其转换为String.valueOf