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