压缩图片上传到阿里云OSS(此处是有损压缩,过两天写下无损压缩)

前言: 以往文章说了如何上传图片到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();
        }

猜你喜欢

转载自blog.csdn.net/weixin_39973810/article/details/86013588