Java 图片进行压缩,要求小于30K,使用Thumbnails进行压缩

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pmdream/article/details/84305019
 public static String resizeImageTo30K(String base64Img) {
        try {
            BufferedImage src = base64String2BufferedImage(base64Img);
            BufferedImage output = Thumbnails.of(src).size(240, 320).asBufferedImage();
            String base64 = imageToBase64(output);
            while (base64.length() - base64.length() / 8 * 2 > 30000) {
                output = Thumbnails.of(output).scale(0.9f).asBufferedImage();
                base64 = imageToBase64(output);
            }
            return imageToBase64(output);
        } catch (Exception e) {
            return base64Img;
        }
    }

因为项目中有用到,要求吧图片进行压缩,然后生成30K的base64编码

Maven中用到的依赖:

<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.8</version>
</dependency>

 可以控制图片的尺寸,然后将图片的bufferedImage 转化成为String 类型的base64

至于项目中用到的30K是通过

base64.length() - base64.length() / 8 * 2 > 30000

来进行计算的

30k即30000Byte

 对于base64转换成为BufferedImage:

public static BufferedImage base64String2BufferedImage(String base64string) {
        BufferedImage image = null;
        try {
            InputStream stream = BaseToInputStream(base64string);
            image = ImageIO.read(stream);
        } catch (IOException e) {
            LogUtils.info("");
        }
        return image;
    }

对于BufferedImage转换成base64:

public static String imageToBase64(BufferedImage bufferedImage) {
        Base64 encoder = new Base64();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            ImageIO.write(bufferedImage, "jpg", baos);
        } catch (IOException e) {
            LogUtils.info("");
        }
        return new String(encoder.encode((baos.toByteArray())));
    }

另外附上图片的Base64的大小计算方法:

 public static boolean isBase64ImageSizeLegal(String base64Pic, int size) {
        int picSize = (base64Pic.length() - (base64Pic.length() / 8) * 2) / 1024;  //单位kb
        return picSize <= size;
    }
扫描二维码关注公众号,回复: 4275095 查看本文章

Thumbnails处理图片尺寸:


        Thumbnails.of(new File("E:/0.jpg")).size(160, 160).toFile(new File("E:/1.jpg"));
    

猜你喜欢

转载自blog.csdn.net/pmdream/article/details/84305019
今日推荐