Java 圖片進行壓縮,要求小於30K,使用Thumbnails進行壓縮
阿新 • • 發佈:2018-11-28
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"));