2014-12-07 79 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};