1.新老版本区别
老版本的ImageMagick,使用的是convert.exe。
新版本使用的是magick.exe.
区别就是在使用的时候,命令不一样
convert -quality 75% D:/1.jpg E:/1.jpg
magick -quality 75% D:/1.jpg E:/1.jpg
没有做更多的测试我现在实际用到的是:
新版本现在是7.0.7 http://www.imagemagick.org/script/download.php
老版本是6.2.7 https://pan.baidu.com/s/1gfpPo1X
2.Why???
因为windows系统有同样的一个命令,convert。估计是基于这个考虑,ImageMagick才把convert换成了magick。
3.为什么使用老版本
现在直接使用java通过调用cmd的方式来调用imageMagick,一直没有成功。原因没找到。
String command = "cmd /c magick -quality 75% E:/1.jpg E:/2.jpg";
Process p = null;
Runtime run = Runtime.getRuntime();
try {
p = run.exec(command);
System.out.println(command);
p.waitFor();
in = p.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String result = read.readLine();
System.out.println("INFO:"+result);
} catch (Exception e) {
e.printStackTrace();
}
而且,之前在linux里面使用的im4java来调用ImageMagick的,im4java,,,不支持新版本。im4java比较老了,应该是在ImageMagick新版本之前就不更新了,所以im4java和新版本的ImageMagick不兼容。
所以,选择使用老版本 。
4.im4java的使用
引入依赖
<dependency>
<groupId>org.im4java</groupId>
<artifactId>im4java</artifactId>
<version>1.4.0</version>
</dependency>
压缩图片的java方法
long zoomstart,zoomend;
zoomstart = System.currentTimeMillis();
start = System.currentTimeMillis();
IMOperation operation = new IMOperation();
operation.addImage(orgfileName);
operation.quality(0.1);
operation.addImage(zoomfileName);
ConvertCmd cmd = new ConvertCmd();
cmd.setSearchPath("C:\\Program Files (x86)\\ImageMagick-6.2.7-Q16"); //Windows需要设置,Linux不需要
cmd.run(operation);
zoomend = System.currentTimeMillis();
System.out.println("生成压缩图片时间 start time:" + zoomstart+ "; end time:" + zoomend+ "; Run Time:" + (zoomend - zoomstart) + "(ms)");