前言: 以往文章说了如何上传图片到OSS,这次因为需求,需要将图片进行压缩上传,提高上传速度.
1.我这里没有使用Thumbnails 来压缩图片,因为我发现如果是传入PNG图片,然后转成jpg的时候回出现图片变红,所以我放弃了这种做法,(但是都说这种效率高,)
2.我直接采用的是java自带的BufferedImage+ImageIO来完成压缩,什么都不说了,只上传压缩代码,如果有同学想获取完整版的上传图片到OSS并压缩的,那么结合我以前发的文章
3.参考网站:
图片变红如何解决? http://bbs.csdn.net/topics/392038869
PNG转成JPG背景颜色改变的问题! http://blog.csdn.net/xujie3/article/details/51848831
上传图片到OSS并压缩! (我使用他这种会变色) http://blog.csdn.net/a3215q/article/details/71126869
public String uploadImg2Oss(MultipartFile file) throws ImgException {
if (file.getSize() > 10 * 1024 * 1024) {
throw new ImgException("上传图片大小不能超过10M!");
}
String originalFilename = file.getOriginalFilename();
String substring = originalFilename.substring(originalFilename.lastIndexOf(".")+1).toLowerCase();
Random random = new Random();
String name = random.nextInt(10000) + System.currentTimeMillis() +"."+substring;
InputStream inputStream = file.getInputStream();
try {
// 把图片读入到内存中
BufferedImage bufImg = ImageIO.read(inputStream);
// 压缩代码
// 存储图片文件byte数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
//防止图片变红
BufferedImage newBufferedImage = new BufferedImage(bufImg.getWidth(), bufImg.getHeight(), BufferedImage.TYPE_INT_RGB);
newBufferedImage.createGraphics().drawImage(bufImg, 0, 0, Color.WHITE, null);
//先转成jpg格式来压缩,然后在通过OSS来修改成源文件本来的后缀格式
ImageIO.write(newBufferedImage,"jpg",bos);
//获取输出流
inputStream = new ByteArrayInputStream(bos.toByteArray());
//上传OSS
this.uploadFile2OSS(inputStream, name);
return name;
} catch (Exception e) {
throw new ImgException("图片上传失败");
} finally {
inputStream.close();
}