版权声明:本文为博主原创文章,未经博主允许不得转载。 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"));