压缩图片上传到阿里云(解决图片变红)

来源:互联网 发布:ug怎么编程钻孔 编辑:程序博客网 时间:2024/06/04 18:01

前言: 以往文章说了如何上传图片到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;try {InputStream inputStream = file.getInputStream();// 把图片读入到内存中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());//上传OSSthis.uploadFile2OSS(inputStream, name);return name;} catch (Exception e) {throw new ImgException("图片上传失败");}}

PS: 

1.注意tomcat是默认上传图片不能大于2M,但是我测试,发现有时候是这样,但是有时候不是这样,(有同学能发现的,告诉我下,谢谢了)

2.如何利用Thumbnails 来压缩图片并且不会变红,(有同学能发现解决方法,希望能告诉我下)



原创粉丝点击