2012-12-21 132 views
0

我使用imagescalr调整图像大小,但我也想压缩图像,使大小保持在32kb以下(即8支持base64字符串高达32kb)。我正在调整这样的图像压缩图像,使用imageScalr

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

我想要一种方式,以便我可以用最少的代码压缩。

+0

* “(如IE 8支持的base64字符串高达32KB)” *有趣。到目前为止,我已经发现了几种用于将图像编码为基本64字符串的用例,这两种用于在浏览器中轻松显示客户端生成的图像的功能,以及绘制应用程序的“撤销/重做”功能。这里的用例是什么? –

+0

我有数据库中blob形式的图像,用于在浏览器中显示它们,我将它们转换为服务器上的base64字符串并将它们发送到浏览器,现在我有两个用例1.显示缩略图(这是150X150图像),因此大小通常保持在32kb以下,并且正确显示。2.当用户单击缩略图时显示图像的放大版本,这需要至少500X344,这就是问题所在。所以我基本上想要将图像与调整大小一起压缩,Imagescalr不提供任何开箱即用的选项。 –

回答

0

你可以尝试

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)); 
....