使用image magick通过java命令转换图像说错误

时间:2014-08-28 04:41:37

标签: java command-line imagemagick

我需要将所有tif,jpeg,gif转换为jpg格式。为此我正在使用

        ProcessBuilder pb2 = new ProcessBuilder("convert.exe", "\"" +dest.toString()+ "\" ", "\" " + dest.getParent().toString().concat("/").concat(dest.getName().toString().substring(0, dest.getName().toString().lastIndexOf(".")).concat(".jpg"))+ "\" " );
        System.out.println("convert " + "\"" + dest.toString() + "\" " + "\" " + dest.getParent().toString().concat("/").concat(dest.getName().toString().substring(0, dest.getName().toString().lastIndexOf(".")).concat(".jpg")) + "\" " );
        pb2.redirectErrorStream(true);
        try {
            Process p2 = pb2.start();
            System.out.println("jpg done for " + dest.getName());
            new Thread(new InputConsumer(p2.getInputStream())).start();
            try {
                System.out.println("Exited with: " + p2.waitFor());
            } catch (InterruptedException ex) {
                Logger.getLogger(ImageFileCopy.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (IOException ex) {
            Logger.getLogger(ImageFileCopy.class.getName()).log(Level.SEVERE, null, ex);
        }

这是在说错误                     "参数无效 - 和                      退出:4"

我也尝试过提供" C:\ Program Files \ ImageMagick-6.8.6-Q16 \ convert.exe"。如果我使用完整路径系统没有显示错误但是长时间使用。

任何想法都建议。

2 个答案:

答案 0 :(得分:1)

我建议使用im4java从您的java代码调用ImageMagick。

它是开源的,有API to call many ImageMagick functions并且易于使用。

调用ImageMagick resize-function(例如)看起来像:

// create command
ConvertCmd cmd = new ConvertCmd();

// create the operation, add images and operators/options
IMOperation op = new IMOperation();
op.addImage("myimage.jpg");
op.resize(800,600);
op.addImage("myimage_small.jpg");

// execute the operation
cmd.run(op);

查看此简单developer's guide以获取更多信息。

答案 1 :(得分:1)

如果您正在使用ProcessBuilder,则无需引用"引用"你的参数,这是使用ProcessBuilder的点,它将保证每个单独的参数作为参数传递给命令

ProcessBuilder pb2 = new ProcessBuilder(
    "convert.exe",
    dest.toString(), 
    dest.getParent().toString().concat("/").concat(dest.getName().toString().substring(0, dest.getName().toString().lastIndexOf(".")).concat(".jpg")));

我也同意拉斐尔的建议,包装API会让生活变得更轻松......

[face palm] ... Windows拥有自己的转换程序,可通过PATH环境变量访问。

即使我使用pb.directory并将目录设置为ImageMagick的安装位置,它仍然会选择Windows / MS程序......

尝试添加convert.exe

的完整路径
ProcessBuilder pb2 = new ProcessBuilder(
    "C:\\Program Files\\ImageMagick-6.8.6-Q16\\convert.exconvert.exe",
    dest.toString(), 
    dest.getParent().toString().concat("/").concat(dest.getName().toString().substring(0, dest.getName().toString().lastIndexOf(".")).concat(".jpg")));

感谢这个answer指出来......