如何使用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 或图像处理工具)来压缩图像,以便我可以获得谷歌建议的图像压缩版本。

提前致谢。

原文由 Darshit Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 490
1 个回答

您可以使用 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 的 Web 服务器模块使用,您可以在此处找到如何为您的网站配置它

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

但是如果你想在你的应用程序中集成 PageSpeed C++ 库,你可以在这里找到它的构建说明。

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

它也有一个 Java Client here

https://github.com/googleapis/google-api-java-client-services/tree/main/clients/google-api-services-pagespeedonline/v5

原文由 fujy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题