首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ProcessBuilder ImageMagic转换命令

Java ProcessBuilder ImageMagic转换命令
EN

Stack Overflow用户
提问于 2016-06-11 20:34:14
回答 1查看 850关注 0票数 0

我试图从图像魔术中运行转换命令,对于这两种情况,这个命令都不起作用。

下面是我使用的代码:

代码语言:javascript
复制
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库时得到的响应相同。这就是我决定首先使用命令的原因。

代码语言:javascript
复制
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

第二种情况是,当我的文件中有空间时:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 21:00:05

实际上,问题是调用convert将导致调用 utility。此实用程序没有-rotate选项,这说明了您的错误。在您的示例中,您需要使用cmd.exe /C生成一个新进程,以便设置环境变量PATH,该变量包含ImageMagick convert可执行文件的路径。

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

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

代码语言:javascript
复制
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "convert", inputFileString, "-rotate", degrees, outputFileString);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37768279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档