需求背景:
去年对图片做批量处理,也就是把原始图片处理成所需的图片,包括缩放所用到的以便做前台调用处理同时实现离线图片操作。
调研思路:
1.java原始的imageio,详情参见以前博客
2.三方native工具,此处是imagemagick,接口基于im4java,其实imagemagick的接口有多种,但是im4java做的仅仅是命令行的转换,然后利用imagemagick去操作
环境:
依赖:
org.im4java im4java 1.2.0
ImageMagick-6.7.6-Q16安装:
${ ImageMagick_home}=D:/tools/tool/ImageMagick-6.7.6-Q16
代码实现:
缩放:
public static void scale(String srcFile, String dstFile, int dstWidth, int dstHeight) { try { IMOperation imOperation = new IMOperation(); imOperation.addImage(srcFile); imOperation.resize(dstWidth, dstHeight); imOperation.addImage(dstFile); ConvertCmd convert = new ConvertCmd(); convert.setSearchPath(imageMagickPath); convert.run(imOperation); } catch (Exception e) { e.printStackTrace(); }}
剪裁:
public static void cut(String srcFile, String dstFile, int x, int y, int widthRange, int heightRange) { try { IMOperation imOperation = new IMOperation(); imOperation.addImage(srcFile); imOperation.crop(widthRange, heightRange, x, y); imOperation.addImage(dstFile); ConvertCmd convert = new ConvertCmd(); convert.setSearchPath(imageMagickPath); convert.run(imOperation); } catch (Exception e) { e.printStackTrace(); }}
测试:
private final static String imageMagickPath = "D:/tools/tool/ImageMagick-6.7.6-Q16";public static void main(String[] args) throws Exception { String srcFile = "G:/1.jpg"; String dstFile = "G:/test.jpg"; int dstHeight = 200; int dstWidth = 200; scale(srcFile, dstFile, dstWidth, dstHeight); int x = 10; int y = 10; int widthRange = 500; int heightRange = 600; cut(srcFile, dstFile, x, y, widthRange, heightRange);}
注意事项:
1.上述代码由于公司协议是经过处理的,如果直接使用请注意扩展性,异常处理等相关事宜