2

從pagespeed我得到只有圖像鏈接和可能的優化字節&百分比像, 壓縮和調整大小https://example.com/…ts/xyz.jpg?036861可以節省212KiB(減少51%)。 壓縮https://example.com/…xyz.png?303584508可節省4.4KiB(減少21%)。如何使用java壓縮圖像?

舉一個例子,我有300kb大小的圖像,對於這個圖像,pagespeed顯示100kb &減少30%。

這隻適用於一個圖像,但我相信我會有很多圖像進行壓縮。 因此,如何通過傳遞字節或百分比作爲參數或使用java (通過使用API​​或圖像處理工具)中的其他計算來壓縮圖像,以便我可以按照google的建議獲取壓縮版本的圖像。

在此先感謝。

回答

5

您可以使用Java ImageIO包爲許多圖像格式做了壓縮,這裏有一個例子

import java.awt.image.BufferedImage; 
import java.io.*; 
import java.util.Iterator; 
import javax.imageio.*; 
import javax.imageio.stream.*; 

public class Compresssion { 

    public static void main(String[] args) throws IOException { 

    File input = new File("original_image.jpg"); 
    BufferedImage image = ImageIO.read(input); 

    File compressedImageFile = new File("compressed_image.jpg"); 
    OutputStream os = new FileOutputStream(compressedImageFile); 

    Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg"); 
    ImageWriter writer = (ImageWriter) writers.next(); 

    ImageOutputStream ios = ImageIO.createImageOutputStream(os); 
    writer.setOutput(ios); 

    ImageWriteParam param = writer.getDefaultWriteParam(); 

    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    param.setCompressionQuality(0.05f); // Change the quality value you prefer 
    writer.write(null, new IIOImage(image, null, null), param); 

    os.close(); 
    ios.close(); 
    writer.dispose(); 
    } 
} 

你可以找到關於它here

也有一些第三方工具,如更多細節這些

編輯:如果你想在你的應用程序中使用谷歌PageSpeed,可用的是無論是對Apache或Nginx的網絡服務器模塊,你可以找到如何配置它爲您的網站在這裏

https://developers.google.com/speed/pagespeed/module/

但是,如果您想將PageSpeed C++庫集成到您的應用程序中,您可以在這裏找到它的構建指令。

https://developers.google.com/speed/pagespeed/psol

它也有在這裏

https://developers.google.com/api-client-library/java/apis/pagespeedonline/v1

+0

使用ImageWriteParam我得到了圖像的壓縮版本,但我不需要壓縮任何谷歌網頁速度建議。 所以,基本上我想圖像的壓縮版本無論谷歌網頁速度暗示。 –

+0

@DarshitPatel我已經更新了我的答案,請檢查它 – fujy

+0

關於此答案的很多有趣的信息。謝謝:) –

0

Java客戶端有色彩壓縮( 「壓縮質量」),並有分辨率壓縮( 「調整」)。富查的答案涉及壓縮質量,但這不是主要節省的來源:主要節省來自調整縮小到更小的尺寸。例如。我用fujy的回答獲得了使用最高壓縮質量的207M的4mb照片,它看起來很糟糕,但我用合理的質量把它降低到了12K,但尺寸更小。

所以上面的代碼應該用於「壓縮質量」,但是這是我調整的建議:

https://github.com/rkalla/imgscalr/blob/master/src/main/java/org/imgscalr/Scalr.java

祝調整是標準的Java庫的一部分,但現在看來,這不是(或者標準方法存在圖像質量問題?)。但是利雅德的圖書館非常小 - 只有一個班級。我只是將這個類複製到我的項目中,因爲我從來沒有學會如何使用Maven,並且它工作得很好。