2014-12-07 65 views
1

我有下面的Java代碼模糊的面孔圖像 - 變量convert設置爲/usr/bin/mogrify從Java不工作,直接調用ImageMagick的調用工作

//String []cmd = {convert, "-region", f.w+"x"+f.h+"+"+x+"+"+y, "-blur 0.0x10.0", path}; 

String cmd = convert + " -region " + f.w+"x"+f.h+"+"+x+"+"+y + " -blur 0.0x10.0 " + "\"" + path + "\""; 

System.out.println(cmd); 
// System.out.println(strJoin(cmd, " ")); 
Process p = Runtime.getRuntime().exec(cmd); 
    BufferedReader in = new BufferedReader( 
         new InputStreamReader(p.getInputStream())); 
    String line = null; 
    while ((line = in.readLine()) != null) { 
     System.out.println(line); 
    } 
p.waitFor(); 

但沒有任何反應上的圖像。

該方案還輸出命令行會調用,例如:

/usr/bin/mogrify -region 37x44+1759+881 -blur 0.0x10.0 "/home/self/.wine/drive_c/windows/profiles/self/My Pictures/test/pic00164.jpg" 

如果我手動調用這一行,一切工作正常。

正如您從註釋中看到的,我也嘗試提供cmd爲一個數組,應自動逃避我的道路空間 - 同樣的效果:無。

+1

一切正常。用'p.getErrorStream嘗試()',而不是'p.getInputStream()'獲取錯誤的描述。 – 2014-12-07 19:03:49

回答

1

永遠無法用手命令行 - 有這個沒有單一的便攜式解決方案。它僅適用於極少數情況,在命令行中不存在空格或(雙)引號。

使用進程生成器來代替:

ProcessBuilder pb = new ProcessBuilder(
    convert, "-region", f.w+"x"+f.h+"+"+x+"+"+y, "-blur 0.0x10.0", path); 
pb.redirectError(); 
Process process = pb.start(); 
BufferedReader in = new BufferedReader(
    new InputStreamReader(process.getInputStream())); 
0

getErrorStream() - 在評論中提到 - 是成功的關鍵。逃跑並不像我嘗試過的那樣工作。然後我嘗試了一個數組,並發現我們必須分離模糊選項。

這工作:

String []cmd = {convert, "-region", f.w+"x"+f.h+"+"+x+"+"+y, "-blur", "0.0x10.0", path};