1、可能经常有这样的案例,会上传一个背景图,用于合成一些图片,这些图片的特定区域是由UI来接收用户的输入,然后传到后端。
2、那么就涉及到背景图,UI给出的图一般是有些大的,因为这样可以等比例的去缩放,而不会出现模糊,并且还可以适应不同的屏幕的大小,这样就后端就有些要求了,比较要压缩图片,但还是要保证大小及质量。
3、java中的ImageIO,还有其它的都可以实现,但是测试下来不是很好处理,动不动就会崩溃,当然也是可以的。
4、我们用第三方提供的Thumbnails来实现,这个使用起来比较简单,节省了一些开发成本,并且还能满足我们的要求,质量+大小并不会失真。
5、引入:
<!-- Thumbnailator 图片压缩 -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
6、使用:
File sourceFile = new File(uploadDir+strNewFileName);
File outputFile = new File(uploadDir+fileName);
Thumbnails.of(sourceFile).scale(1.0f).outputQuality(0.8f).toFile(outputFile);
7、说明:
上面声明了二个文件File:
sourceFile:刚上传成功的源文件
outputFile:压缩以后的图片
scale(1.0f):缩放
outputQuality(0.8f):压缩后质量
toFile(outputFile):保存到目标文件
8、实测下来,还是比较优秀的,一些不失真,测试了一个3M多的图片,下来也就800K多。
9、https://github.com/coobird/thumbnailator