java - 使用运行时 exec 从 Java 调用 ImageMagick Convert

标签 java eclipse imagemagick runtime.exec imagemagick-convert

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

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

 convert my_image.TIF dest.TIF

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

我尝试使用 JMagick,但我只能使用以前的 ImageMagick 版本,并且在转换 tifs 时遇到问题(每次我得到黑色图像时,也在命令行中)。最新的 Windows 版 JMagick 未找到较新的 ImageMagick 版本。

所以我尝试使用 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) { } 

无论我到底插入什么命令,我总是会收到第二个参数的错误消息“Invalid Param - dest.tif”。

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

最佳答案

更新答案 2017 年 3 月 28 日

ImageMagick v7 起,convert 命令已被 magick 取代,以避免出现此问题。所以...

  • convert input.tif output.tif 变为 magick input.tif output.tif
  • identify image.jpg 变为 magick recognize image.jpg
  • 比较 image.jpg ... 变为 magick 比较 image.jpg ...
  • compose image.jpg ... 变为 magick compose image.jpg ...
  • mogrify image.jpg ... 变为 magick mogrify image.jpg ...

原始答案

您可以将 Windows 的内置 convert 程序重命名为 convertntfs 或将 ImageMagick 的 convert 重命名为 IMconvert 。这可能比希望您始终记得在所有计算机上正确设置 PATH 更好。

关于java - 使用运行时 exec 从 Java 调用 ImageMagick Convert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22402977/

相关文章:

java - Spring Mongodb-无法实例化 bean 类 [java.util.List] : Specified class is an interface

java - 如何在 Eclipse 的多个选项卡中打开多个控制台?

java - 如何在Java中加载外部.class文件?

php - 计算图像中任意颜色质心并将其提供给 PHP 的最快方法

ruby-on-rails - ImageMagick 安装 Windows

java - 如何确定一个列表是否以相同的顺序包含在另一个列表中(在 Java 中)?

java - 在 Java 中打印 BufferedImage 的正确方法

java - 将项目导出为可运行 jar 时无法调用外部 Bash 程序

ruby-on-rails - 为什么 Ruby open-uri open 在我的单元测试中返回一个 StringIO,而在我的 Controller 中返回一个 FileIO?

java - VSCode 中的自动 ActiveJDBC 检测