String command = "cmd /c magick -quality 75% E:/1.jpg E:/2.

时间:2022-05-25 07:37:04

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
老版本是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)");