使用运行时exec从Java调用ImageMagick转换

时间:2014-03-14 10:52:11

标签: java eclipse imagemagick runtime.exec imagemagick-convert

我想将一些图像从tif转换为tif以改变光度解释。

我找到了ImageMagick工具并安装了它,在命令行中,以下命令可以正常工作并完成我想要的工作:

 convert my_image.TIF dest.TIF

现在我想从Java程序自动启动它。 我使用Eclipse和ImageMagick 6.8.8.-Q16。在Windows上工作。

我尝试使用JMagick,但我只使用以前的ImageMagick版本,这有转换tifs的问题(每次我得到一个黑色图像,也在命令行)。最新的JMagick-Version for Windows找不到更新的ImageMagick-Version。

所以我尝试使用Java Process Builder或Runtime exec命令,例如:

 Process proc = Runtime.getRuntime().exec(new String[]{"convert","my_image.TIF","dest.TIF"});

 ProcessBuilder pb = new ProcessBuilder("convert", "0011D7FE.TIF", "dest.tif");   
 pb.redirectErrorStream(true);   
 try {   
   Process p = pb.start();   
   BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));   
   String line = null;   
   while((line=br.readLine())!=null){   
       System.out.println(line);   
   }   
   System.out.println(p.waitFor());   
  } catch(Exception e) { } 

无论如何,我完全插入了什么命令,我总是得到错误消息"无效的参数 - dest.tif"为第二个参数。

我发现这篇文章http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=19679的问题类似,程序试图使用一些Windows转换功能。 所以我将ImageMagick文件夹添加到我的系统变量中,并在eclipse中添加了一个包含此文件夹的新变量到我的项目构建路径。但我仍然得到同样的错误。 还有其他地方我必须设置路径吗?或者我得到的错误的任何其他解释?

1 个答案:

答案 0 :(得分:3)

更新回答2017年3月28日

ImageMagick 的第7版以来,convert命令已被magick取代,以避免出现此问题。所以......

  • convert input.tif output.tif变为magick input.tif output.tif
  • identify image.jpg变为magick identify image.jpg
  • compare image.jpg ...变为magick compare image.jpg ...
  • compose image.jpg ...变为magick compose image.jpg ...
  • mogrify image.jpg ...变为magick mogrify image.jpg ...

原始答案

您可以将Windows'内置convert程序重命名为convertntfs,也可以将ImageMagick的convert重命名为IMconvert。这可能比希望你总是记得在所有机器上正确设置PATH更好。