java图片循环压缩thumbnailator

thumbnailator图片循环压缩

<dependency>
	<groupId>net.coobird</groupId>
	<artifactId>thumbnailator</artifactId>
	<version>0.4.8</version>
</dependency>
public byte[] commpressPicCycle(MultipartFile multipartFile, long desFileSize,double accuracy){
        try(ByteArrayOutputStream out = new ByteArrayOutputStream()){
            long fileSize = multipartFile.getSize();
            //判断大小,如果小于200k,不压缩,如果大于等于200k,压缩
            if(fileSize <= desFileSize * 1024){
                return multipartFile.getBytes();
            }
            //计算宽高
            BufferedImage output = ImageIO.read(multipartFile.getInputStream());
            int imgWidth = output.getWidth();
            int imgHeight = output.getHeight();
            int desWidth = new BigDecimal(imgWidth).multiply(
                    new BigDecimal(accuracy)).intValue();
            int desHeight = new BigDecimal(imgHeight).multiply(
                    new BigDecimal(accuracy)).intValue();
            //循环压缩到200kb以下
            output = Thumbnails.of(output).size(desWidth, desHeight).asBufferedImage();
            String  base64 = imageToBase64(output);
            while (base64.length() - base64.length() / 8 * 2 > 204800) {
                output = Thumbnails.of(output).scale(0.9f).asBufferedImage();
                base64 = imageToBase64(output);
            }

            ImageIO.write(output, "jpg", out);
            return out.toByteArray();
        }catch (IOException e){
            e.printStackTrace();
        }
            return null;
    }

    public static String imageToBase64(BufferedImage bufferedImage) {
        BASE64Encoder encoder = new BASE64Encoder();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            ImageIO.write(bufferedImage, "jpg", baos);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return encoder.encode((baos.toByteArray()));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值