Compress picture size
@Log4j2
public class Base64Util {
/**
* Compressed images within 100k
*
* @param base64Img
* @return
*/
public static String resizeImageTo100K(String base64Img) {
try {
BufferedImage src = base64String2BufferedImage(base64Img);
BufferedImage output = Thumbnails.of(src).size(src.getWidth()/3, src.getHeight()/3).asBufferedImage();
String base64 = imageToBase64(output);
if (base64.length() - base64.length()/8 * 2 > 40000) {
output = Thumbnails.of(output).scale(1/(base64.length()/40000)).asBufferedImage();
base64 = imageToBase64(output);
}
return base64;
} catch (Exception e) {
return base64Img;
}
}
/**
* base64 convert to BufferedImage
*
* @param base64string
* @return
*/
public static BufferedImage base64String2BufferedImage(String base64string) {
BufferedImage image = null;
try {
InputStream stream = BaseToInputStream(base64string);
image = ImageIO.read(stream);
} catch (IOException e) {
log.info("");
}
return image;
}
/**
* Base64 convert to InputStream
*
* @param base64string
* @return
*/
private static InputStream BaseToInputStream(String base64string) {
ByteArrayInputStream stream = null;
try {
BASE64Decoder decoder = new BASE64Decoder();
byte[] bytes1 = decoder.decodeBuffer(base64string);
stream = new ByteArrayInputStream(bytes1);
} catch (Exception e) {
// TODO: handle exception
}
return stream;
}
/**
* BufferedImage switch to base64
*
* @param bufferedImage
* @return
*/
public static String imageToBase64(BufferedImage bufferedImage) {
Base64 encoder = new Base64();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(bufferedImage, "jpg", baos);
} catch (IOException e) {
log.info("");
}
return new String(encoder.encode((baos.toByteArray())));
}
}