1、前言
现在手机的像素都比较高,我们做了一个项目,巡检的时候都是传的图片,开始以为图片不占多大的内存,时间一久,占用的空间是最大的。进去文件夹看都是1-20MB不等的图片,这哪行。找了个java压缩图片工具类(thumbnailator),这是我试过最好用的一个图片压缩类。
2、maven依赖
<!--压缩图片工具-->
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.6</version>
</dependency>
3、方法使用
3.1、压缩目录下的所有图片
压缩后的文件名保持不变,输出格式为jpg
//你图片的物理路径目录
String source="E:\\fileUpload";
//压缩后放的目录
String traget="E:\\fileUpload2";
ThumbnailUtil.of(new File(source).listFiles(ThumbnailUtil.readFilter())).scale(1D).outputQuality(0.5D)
.outputFormat(ThumbnailUtil.orgForm).toFiles(new File(traget), "");
3.2、压缩目录下的所有图片
压缩后的文件名和格式保持不变
//你图片的物理路径目录
String source="E:\\fileUpload";
//压缩后放的目录
String traget="E:\\fileUpload2";
ThumbnailUtil.of(new File(source).listFiles(ThumbnailUtil.readFilter())).scale(1D).outputQuality(0.5D)
.outputFormat(ThumbnailUtil.orgForm).toFiles(new File(traget), "");
3.3、压缩单个图片
3.3.1、按照图片的质量去压缩,中等质量
//你图片的物理路径
String source="E:\\fileUpload\\01.jpg";
//压缩后放的目录
String traget="E:\\fileUpload2\\01.jpg";
//压缩单个图片
ThumbnailUtil.of(new File(source)).identifyCompress(ThumbnailUtil.ratios[1])
.toFile(new File(traget));
3.3.2、尺寸不变,只压缩图片的质量
//你图片的物理路径
String source="E:\\fileUpload\\01.jpg";
//压缩后放的目录
String traget="E:\\fileUpload2\\01.jpg";
//压缩单个图片
ThumbnailUtil.of(new File(source)).scale(1D).outputQuality(0.4D)
3.4、压缩MultipartFile类型图片
3.4.1 多个压缩
MultipartFile[] myFiles = ThumbnailUtil.of(myFiles)
.identifyCompress(ThumbnailUtil.ratios[0])
.outputFormat(ThumbnailUtil.orgForm).asMultipartFiles();
3.4.2 单个压缩
MultipartFile[] filelist = ThumbnailUtil.of(myFile)
.identifyCompress(ThumbnailUtil.ratios[2])
.outputFormat(ThumbnailUtil.orgForm).asMultipartFiles();
MultipartFile file=filelist[0];