【问题标题】:Running convert command of image magic using Java gives unable to load module error使用 Java 运行 image magic 的转换命令导致无法加载模块错误
【发布时间】:2015-04-28 20:00:54
【问题描述】:

我写了一个执行imagemagic转换命令的类。

public class ImageMagicDemo {

public static void main(String[] argp){


    ProcessBuilder pb2 = new ProcessBuilder("G:\\project\\installation\\imagemagic\\convert","G:\\demo\\image\\frame.jpg", "-resize", "20x20",
            "G:\\demo\\image\\resizeImage\\frame1.jpg");
    pb2.redirectErrorStream(true);

    Process p2;
    try {
        p2 = pb2.start();
         BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream()));
            String line = null;
            while((line=br.readLine())!=null){
                System.out.println(line);
            }
            System.out.println("2"+p2.waitFor());

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

但我收到以下回复

convert.exe: unable to open image `G:\demo\image\frame.jpg': No such file or directory @ error/blob.c/OpenBlob/2692.
convert.exe: unable to load module `G:\project\installation\imagemagic\modules\coders\IM_MOD_RL_JPEG_.dll': The specified module could not be found.
@ error/module.c/OpenModule/1282.
convert.exe: no decode delegate for this image format `JPG' @ error/constitute.c/ReadImage/501.
convert.exe: no images defined `G:\demo\image\resizeImage\frame1.jpg' @ error/convert.c/ConvertImageCommand/3212.

.png 文件也有同样的问题。我在 Window8 上安装了 ImageMagick-6.9.1-2-Q16-x64-dll.exe。 但是,如果我在命令提示符下运行以下命令

convert -resize 1024x768 G:\\demo\\image\\frame.jpg G:\\demo\\image\\resizeImage\\frame1.jpg

它成功执行并复制目标文件夹中调整大小的图像。如果有人知道请回复。

谢谢

【问题讨论】:

  • 您也可以更改执行命令的工作目录,但是您的 ProcessBuilder 参数与命令行参数不匹配...
  • @MadProgrammer,文件名有拼写错误,-resize 参数无效,因为它们仅定义尺寸。但这在从 java 程序运行命令时不起作用。我也通过在“程序文件”目录中安装 imagemagic 来尝试这个。但在那种情况下也没有运气。
  • 您使用的是 64 位还是 32 位版本的 ImageMagic? Java,64 位还是 32 位呢?
  • 只有当我使用ProcessBuilder#directory(File)并将convert.exe的位置传递给它时,我才能让它工作
  • @MadProgrammer,使用 ProcessBuilder#directory(File) 后,问题得到解决。谢谢

标签: java imagemagick


【解决方案1】:

只有当我使用ProcessBuilder#directory(File)更改要从中运行执行的工作目录时,我才能让它工作

ProcessBuilder pb = new ProcessBuilder(
                "C:\\Program Files\\ImageMagick-6.9.1-Q16\\convert.exe",
                "C:\\Path\to\Large.png",
                "-resize", "1027x768",
                "C:\\Path\to\small.png");

try {
    pb.inheritIO();
    pb.redirectErrorStream();
    pb.directory(new File("C:\\Program Files\\ImageMagick-6.9.1-Q16"));
    Process p = pb.start();
    try (InputStream is = p.getInputStream()) {
        int in = -1;
        while ((in = is.read()) != -1) {
            System.out.print((char)in);
        }
    }
    System.out.println("Exited with " + p.waitFor());
} catch (IOException | InterruptedException ex) {
    ex.printStackTrace();
}

【讨论】:

    【解决方案2】:

    在我的情况下,它已经帮助安装 ImageMagick 的 static 版本,而不是 dynamic/dll。试试看。顺便提一句。调用功能应与 x86 或 x64 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2016-01-06
      • 2021-07-17
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多