通过java命令使用image magick转换图像显示错误
我需要将所有的tif,jpeg,gif格式转换成jpg格式。为此,我使用通过java命令使用image magick转换图像显示错误,java,command-line,imagemagick,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().
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:\ProgramFiles\ImageMagick-6.8.6-Q16\convert.exe”。如果我使用全路径系统,不会显示错误,但会等待很长时间
我建议您使用java代码调用ImageMagick
它是开源的,有很多优点,并且易于使用
调用ImageMagick resize函数(例如)如下所示:
// 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);
有关详细信息,请选中此简单项。如果您使用的是
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")));
我也同意Rafael的建议,一个包装器API将使生活变得更加轻松
[face palm]…Windows有自己的转换程序,可通过环境变量路径访问该程序
即使当我使用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")));
感谢您指出了这一点……如果我在运行时没有“引号”,那么当我使用ProcessBuilder pb2=new ProcessBuilder(Config.imagemagickrootpath+“/”+“convert”、“-density”、“100”、dest.toString()、“-background”、“white”、“-alpha”、“remove”、dest.toString()、dest.getParent().toString().concat(“/”)时,它也会说同样的错误.concat(dest.getName().toString().substring(0,dest.getName().toString().lastIndexOf(“.”).concat(“.jpg”));。系统正在创建两个映像-o,映像-1。我可以知道原因吗?您是否尝试过将“源”文件引用作为第一个选项(不要让imagemagic在我面前检查)重复是由于参数中调用了两次“dest.toString()”造成的。如何下载im4javajar@Dhinakar这是链接:只需下载源代码并将其包含到您的项目中。使用ConvertCmd类,如我的答案所示。在我的回答中,还有指向完整API和开发者指南的链接,让您可以根据自己的意愿自定义此示例。在java代码中,我们可以通过以下方式设置路径:String myPath=“C:\\Programs\\ImageMagick-6.3.9-Q16”;ProcessStarter.setGlobalSearchPath(myPath);