[英]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。
您可以使用它來壓縮和調整圖像大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.