我正在尝试从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参数?我在日志中输出了信息,当我将其复制/粘贴到命令行时,命令会在两种情况下都通过。为什么我不能像输出那样使用这个命令?
答案 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
。