我需要将所有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"。如果我使用完整路径系统没有显示错误但是长时间使用。
任何想法都建议。
答案 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指出来......