首先需要引入第三方的thumbnailator包
可以使用maven引入
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
然后即可进行图片压缩
// 图片压缩
public static void main(String[] args) throws IOException {
// 会直接替换源文件
compressPicCycle("D:\\files\\gyl\\image\\test.jpg",1024,0.6);
}
/**
* 图片压缩
* @Param desPath 目标路径
* @Param desFileSize 目标大小,单位kb
* @Param accuracy 每次压缩的比例 如 0.8
*/
public static void compressPicCycle(String desPath , long desFileSize,
double accuracy) throws IOException {
File imgFile = new File(desPath);
long fileSize = imgFile.length();
//判断大小,如果小于目标大小,不压缩
if (fileSize <= desFileSize * 1024) {
return;
}
//计算宽高
BufferedImage bim = ImageIO.read(imgFile);
int imgWidth = bim.getWidth();
int imgHeight = bim.getHeight();
int desWidth = new BigDecimal(imgWidth).multiply(
new BigDecimal(accuracy)).intValue();
int desHeight = new BigDecimal(imgHeight).multiply(
new BigDecimal(accuracy)).intValue();
Thumbnails.of(desPath).size(desWidth, desHeight).outputQuality(accuracy).toFile(desPath);
//如果不满足要求,递归直至满足要求
compressPicCycle(desPath, desFileSize, accuracy);
}