1. 程式人生 > >Java 圖片進行壓縮,要求小於30K,使用Thumbnails進行壓縮

Java 圖片進行壓縮,要求小於30K,使用Thumbnails進行壓縮

 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;
    }

 

 

Thumbnails處理圖片尺寸:


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