2016-06-11 94 views
0

我試圖從圖像魔法運行轉換命令,並且對於這兩種情況下此命令不起作用。Java ProcessBuilder ImageMagic轉換命令

這裏是我使用的代碼:

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 

爲什麼會invalida參數?我在日誌中輸出了信息,當我複製/粘貼到命令行時,命令在兩種情況下都會傳遞。爲什麼我不能像輸出那樣使用這個命令?

回答

0

問題實際上是致電convert將導致致電the Windows convert utility。此實用程序沒有-rotate選項,它解釋了您的錯誤。在你的情況下,你需要產生一個cmd.exe /C的新進程,以便設置包含ImageMagick convert可執行文件路徑的環境變量PATH

第二點需要考慮的是每個參數都應設置爲ProcessBuilder的單獨命令。作爲單個命令傳遞"-rotate 90"將不起作用,您需要傳遞兩個命令:"-rotate""90"

這樣的ProcessBuilder以下建設按計劃將工作:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "convert", inputFileString, "-rotate", degrees, outputFileString); 

如果degrees不是String而是int例如,你仍然可以將其轉換爲一個帶String.valueOf

+0

謝謝。我從來沒有猜到這需要另一個應用程序。由於我需要爲Windows平臺上的unix環境開發,這使事情變得複雜。嘗試我的代碼在debian上,它沒有任何改變。 – Marko

+0

@ user1925253是的,這有點痛苦。我想到的另一種可能性是使用imagemagick實用程序的完整路徑並使用它。 – Tunaki

相關問題