我试图从图像魔术中运行转换命令,对于这两种情况,这个命令都不起作用。
下面是我使用的代码:
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();在第一种情况下,我得到了以下输出,这与我使用im4java库时得到的响应相同。这就是我决定首先使用命令的原因。
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第二种情况是,当我的文件中有空间时:
2016-06-11 22:23:00 INFO - convert "C:\photo-gallery\photo-gallery-ui\portfolios\admin\Mare i Marko\Marko[2]\12717488_1578649372458773_429110010804118179_n.jpg" -rotate 90.0 "C:\photo-gallery\photo-gallery-ui\portfolios\admin\Mare i Marko\Marko[2]\1465676580556.jpg"
2016-06-11 22:23:00 ERROR - Invalid Parameter - i为什么我会得到失效参数?我在日志中完成了信息输出,当我将其复制/粘贴到命令行时,这两种情况下都会传递命令。为什么不能像输出那样使用这个命令呢?
发布于 2016-06-11 21:00:05
实际上,问题是调用convert将导致调用 utility。此实用程序没有-rotate选项,这说明了您的错误。在您的示例中,您需要使用cmd.exe /C生成一个新进程,以便设置环境变量PATH,该变量包含ImageMagick convert可执行文件的路径。
要考虑的第二点是,每个参数都应该设置为ProcessBuilder的单独命令。将"-rotate 90"作为单个命令传递不起作用,您需要传递两个命令:"-rotate"和"90"。
因此,ProcessBuilder的下列结构将按预期工作:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "convert", inputFileString, "-rotate", degrees, outputFileString);例如,如果degrees不是String而是int,则仍然可以将其转换为String.valueOf。
https://stackoverflow.com/questions/37768279
复制相似问题