我試圖讓下面的ImageMagick命令與Java的ProcessBuilder工作:複雜ImageMagick的命令通過的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的轉義字符
``
- 斯普利特在單個陣列中物品的命令(例如, 「(」, 「+克隆」, 「-α」)
做什麼我錯過了嗎?
我可能是錯的,但是列表中的命令不需要是實際的命令嗎?你有沒有嘗試過使用'Runtime.exec()'? –
Runtime.exec()與一個字符串似乎工作。謝謝。 – Xerox23