2014-04-02 217 views
0

從我們的應用程序中,我們從第三方服務獲取圖像(jpeg/png),下載後我們要將這些圖像保存爲壓縮圖像。Java圖像壓縮

任何人都可以請指導如何壓縮Java中的圖像?

+2

JPEG和PNG圖像* *被壓縮。 – Boann

+0

我認爲你需要看圖像切片。 Photoshop有這個,它使圖像加載速度更快。請檢查切片技術,看看是否可以幫助你。 – Soley

回答

4

JPG和PNG圖像已經壓縮,所以它不完全清楚你的意圖是什麼。然而,在一般情況下,你可以寫ImageIO圖片:

ImageIO.write(image, "jpg", outputStream); 

(或"png",類似)。默認情況下,這不允許您選擇壓縮級別(即文件大小和圖像質量之間的折衷)。爲了編寫具有比默認壓縮不同的JPG文件,你可以使用一個實用的方法是這樣的:

public static void writeJPG(
    BufferedImage bufferedImage, 
    OutputStream outputStream, 
    float quality) throws IOException 
{ 
    Iterator<ImageWriter> iterator = 
     ImageIO.getImageWritersByFormatName("jpg"); 
    ImageWriter imageWriter = iterator.next(); 
    ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam(); 
    imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    imageWriteParam.setCompressionQuality(quality); 
    ImageOutputStream imageOutputStream = 
     new MemoryCacheImageOutputStream(outputStream); 
    imageWriter.setOutput(imageOutputStream); 
    IIOImage iioimage = new IIOImage(bufferedImage, null, null); 
    imageWriter.write(null, iioimage, imageWriteParam); 
    imageOutputStream.flush(); 
} 
+0

嗨Marco13,謝謝你的回覆。讓我詳細說明一下。我們正在構建一個realstats應用程序,有很多屬性,每個屬性都有10到30個.jpeg圖像。當選擇一個屬性時,會顯示相應的圖像。有什麼辦法來壓縮/縮小圖像的大小加載速度?讓我知道你是否想要更多細節 –

+0

壓縮通常只是間接地與*加載*圖像所需的時間相關。壓縮映像可能加載速度更快(因爲需要從硬盤讀取更少的數據),但這必須通過基準進行驗證(儘管我懷疑可能會明智地驗證此操作)。可能優化的一般提示(如在後臺線程中緩存或預加載圖像)超出了本評論的範圍。 – Marco13