需求背景:
去年对图片做批量处理,也就是把原始图片处理成所需的图片,包括缩放所用到的以便做前台调用处理同时实现离线图片操作。
调研思路:
1.java原始的imageio,详情参见以前博客
基于javax.imageio的图片缩放和图片剪裁
2.三方native工具,此处是imagemagick,接口基于im4java,其实imagemagick的接口有多种,但是im4java做的仅仅是命令行的转换,然后利用imagemagick去操作
环境:
依赖:
<dependency> <groupId>org.im4java</groupId> <artifactId>im4java</artifactId> <version>1.2.0</version> </dependency>
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.上述代码由于公司协议是经过处理的,如果直接使用请注意扩展性,异常处理等相关事宜