簡體   English   中英

如何使用 java 壓縮圖像?

[英]How can I compress images using java?

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

例如,我有大小為 300kb 的圖像,對於此圖像,pagespeed 顯示 100kb 和 30% 的縮減。

這僅適用於一張圖片,但我相信我會有很多圖片需要壓縮。 那么我如何通過將字節或百分比作為參數傳遞或使用 java 中的任何其他計算(通過使用 API 或圖像處理工具)來壓縮圖像,這樣我就可以按照谷歌的建議獲得圖像的壓縮版本。

提前致謝。

您可以使用 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();
  }
}

您可以在此處找到有關它的更多詳細信息

還有一些像這樣的第三方工具

編輯:如果您想在您的應用程序中使用 Google PageSpeed ,它可以作為 Apache 或 Nginx 的網絡服務器模塊使用,您可以在此處找到如何為您的網站配置它

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

但是如果你想在你的應用程序中集成PageSpeed C++ 庫,你可以在這里找到它的構建說明。

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

它也有一個 Java 客戶端在這里

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

有顏色壓縮(“壓縮質量”)和分辨率壓縮(“調整大小”)。 Fujy 的回答涉及壓縮質量,但這不是主要節省的地方:主要節省來自縮小到更小的尺寸。 例如,我使用 fujy 的答案使用最大壓縮質量將 4mb 的照片壓縮到 207K,看起來很糟糕,但我使用合理的質量但較小的尺寸將其降低到 12K。

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

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

我希望調整大小是標准 Java 庫的一部分,但似乎不是,(或者標准方法存在圖像質量問題?)。 但利雅得的圖書館真的很小——只有一個班級。 我只是將這個類復制到我的項目中,因為我從未學習過如何使用 Maven,而且它運行良好。

一個班輪 java 解決方案:thumbnailator。

Maven 依賴:

<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.17</version>
</dependency>

一個班輪:

Thumbnails.of(inputImagePathString).scale(scalingFactorFloat).outputQuality(qualityFactorFloat).toFile(outputImagePathString);

作為這個問題的解決方案,我可以推薦 TinyPNG 的 API。
您可以使用它來壓縮和調整圖像大小。

文檔: tinypng.com/developers/reference/java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM