Bootstrap

使用Thumbnails压缩或放大图片大小(java)

首先看下缩放图片的核心代码,其实只有一行而已
//ins表示ByteArrayInputStream形式的图片
//scale中的数据就是缩小或者放大的比例,比如小于1则表示压缩,大于1表示放大
//out表示ByteArrayOutputStream形式的输出数据 也就是ins缩放后的图片数据
Thumbnails.of(ins).scale(0.99f).toOutputStream(out);
整体代码:

为了方便起见,我把整个代码全拿过来了,防止导错包,所以使用的话直接复制即可使用
说明我这里压缩的图片是base64格式的图片,已经去掉base64头部信息,关于如何去除头部信息已经获取图片大小可以参考以下链接

获取base64编码格式的图片大小
package com.web.framework.bbpp.module.yituhezisone.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import net.coobird.thumbnailator.Thumbnails;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;




public class CompressImage {

    public static void main(String[] args) {
        String str = "base64编码格式的图片";
         CompressImage com = new CompressImage();
          //因为我使用的是base64编码格式的图片数据,所以需要先将base转为字节数组
         byte[] decode = com.decode(str);
         //将字节数组数据传入压缩方法中compressByteImage
         str =  com.compressByteImage(decode);
         System.out.println("压缩后的图片数据"+str);
      }

    /**
     * byte数组 转换为 Base64字符串
     */
    public  String encode(byte[] data) {
        return new BASE64Encoder().encode(data);
    }

    /**
     * Base64字符串 转换为 byte数组
     */
    public  byte[] decode(String base64) {
        try {
            return new BASE64Decoder().decodeBuffer(base64);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new byte[0];
    }

    public String compressByteImage(byte[] bytes) throws IOException {
    //先将字节数组数据转为ByteArrayInputStream 形式
        ByteArrayInputStream ins = new ByteArrayInputStream(bytes);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        //进行压缩 out就是压缩后的数据
        Thumbnails.of(ins).scale(0.99f).toOutputStream(out);
        //将ByteArrayOutputStream形式转为字节数组
        byte[] data = out.toByteArray();
        //将字节数组数据转为base64的格式
        String imageStr = encode(data);
        return imageStr;
    }
;