【发布时间】:2017-06-26 13:00:09
【问题描述】:
我正在尝试让以下 ImageMagick 命令与 Java ProcessBuilder 一起使用:
convert.exe image.png `( `+clone -alpha extract mask.png -compose Darken -composite `) -compose CopyOpacity -composite out.png
文件路径(源图像、蒙版图像和目标图像)是可配置的。 如果我在 PowerShell 或 Windwos Cmd 中输入命令,它会按预期工作。 当我尝试通过 Java ProcessBuilder 执行相同的命令时,它失败了。
这是我最后的代码:
File srcFile = new File("C:/Users/AAA/Desktop/PNG/image.png");
File maskFile = new File("C:/Users/AAA/Desktop/PNG/mask.png");
File destFile = new File("C:/Users/AAA/Desktop/PNG/out-1.png");
List<String> commands = new ArrayList<>();
commands.add("C:/Program Files/ImageMagick-6.9.1-Q16/convert.exe");
commands.add(srcFile.getAbsolutePath());
commands.add(" `( `+clone -alpha extract " + maskFile.getAbsolutePath() + " -compose Darken -composite `)");
commands.add("-compose CopyOpacity -composite " + destFile.getAbsolutePath());
ProcessBuilder pb = new ProcessBuilder(commands);
pb.inheritIO();
try {
int i = pb.start().waitFor();
System.out.println("Finished with code: " + i);
} catch (Exception e) {
System.out.println("asdasdasd: " + e);
}
这是来自流程构建器的我们的输入:
convert.exe: unable to open image `/Users/AAA/Desktop/PNG/mask.png -compose Darken -composite )': No such file or directory @ error/blob.c/OpenBlob/2692.
convert.exe: no decode delegate for this image format ` ( +CLONE -ALPHA EXTRACT C' @ error/constitute.c/ReadImage/501.
convert.exe: missing an image filename `-compose CopyOpacity -composite C:\Users\AAA\Desktop\PNG\out-1.png' @ error/convert.c/ConvertImageCommand/3214.
似乎命令没有以正确的方式解释
我尝试了以下几种可能性,但大多数都具有相同的结果。
- 逃生路径
- 删除 PowerShell 转义字符
`` - 将命令拆分为单个数组项(例如“(”、“+clone”、“-alpha”)
我错过了什么?
【问题讨论】:
-
我可能错了,但是列表中的命令不需要是实际命令吗?您是否尝试过使用
Runtime.exec()? -
Runtime.exec() 与单个字符串似乎工作。谢谢。
标签: java command-line imagemagick processbuilder