Сжать изображение, используя imageScalr

Я использую imagescalr для изменения размера изображений, но я также хочу сжать изображения так, чтобы размер оставался ниже 32 КБ (т. Е. 8 поддерживает строки base64 до 32 КБ). Я изменяю размер изображения вот так

Map resizeImage(BufferedImage imageData, int width, int height, String imageFormat){

    BufferedImage thumbnail =  Scalr.resize(imageData, Scalr.Method.SPEED, Scalr.Mode.FIT_EXACT ,
    width, height, Scalr.OP_ANTIALIAS);

    ByteArrayOutputStream baos = new ByteArrayOutputStream()
    ImageIO.write(thumbnail, imageFormat, baos)
    baos.flush()
    byte[] imageBytes = baos.toByteArray()
    baos.close()

    return [imageBytes:imageBytes, imageFormat:imageFormat]
}

Я хочу способ, чтобы я мог сжать с наименьшим количеством изменений в коде.

1 ответ

Вы могли бы попробовать

ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream gzip = new GZIPOutputStream(baos);
ImageIO.write(thumbnail, imageFormat, baos)
gzip.close();
byte[] zippedImageBytes = baos.toByteArray();

разархивирования

InputStream in = new GZIPInputStream(new ByteArrayInputStream(zippedImageBytes));
....
Другие вопросы по тегам