2012-12-21 227 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)); 
....