遇到的问题: 1.Thumbnails.scale效果会导致图片大小变大
scale值 | ||||||
原图片格式 | 2 | 1 | 0.8 | 0.6 | 0.4 | 0.2 |
jpeg | 明显变大 | 变大 | 变大 | 变大 | 明显变小 | 变大 |
png | 变大 | 变小 | 变小 | 变小 | 变小 | 最小 |
png经过压缩 | 明显变大 | 不变 | 变小 | 变小 | 变小 | 最小 |
png未经过压缩 | 明显变大 | 明显变大 | 变大 | 变大 | 变小 | 变小 |
jpeg改为png | 明显变大 | 明显变大 | 变大 | 变大 | 变大 | 变小 |
pngtopng | 明显变大 | 明显变大 | 明显变大 | 明显变大 | 明显变大 | 变小 |
Thumbnails应该是存在bug,但是也一直没有更新版本,所以根据多次测试得来的结果:用jpg转成jpg效果最佳。所以当图片为png时,先改成jpg格式,再进行压缩。
public static String imgConvert(String tempDirPath, String fileName, String fileExt) throws IOException {
String srcPath = tempDirPath + fileName; //原始图片路径
if("png".equals(fileExt)) {
//生成新图片名称
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String fileString = df.format(new Date()) + "_" + new Random().nextInt(1000) + ".jpg";
//新图片全路径
String newJpg = tempDirPath + fileString;
// 1、先转换成jpg
Thumbnails.of(srcPath).scale(1f).toFile(newJpg);
//2.jpg图片压缩
Thumbnails.of(newJpg).scale(1f).outputQuality(0.25d).toFile(newJpg);
//压缩成功后,删除png图片
File f = new File(srcPath);
f.delete();
return fileString;
} else {
Thumbnails.of(srcPath).scale(1f).outputQuality(0.25d).toFile(srcPath);
}
return null;
}