java - 如何使用java压缩图像?

标签 java image image-processing image-compression google-pagespeed

从 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();
  }
}

您可以找到有关它的更多详细信息here

还有一些像这样的第三方工具

编辑:如果您想在您的应用程序中使用 Google PageSpeed,它可以作为 Apache 或 Nginx 的网络服务器模块使用,您可以找到如何配置它在这里为您的网站

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

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

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

这里还有一个Java客户端

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

关于java - 如何使用java压缩图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44565500/

相关文章:

javascript - 您可以使用 JavaScript 将多张图片组合成一张图片吗?

java - 在 Intellij CE 中,如何显示 Maven 选项卡?

java - 将 For 循环与 Weather Java Web 服务结合使用

python - 如何检测多个附加图像并将其剪掉?

javascript - 是否可以加载图像,在内存中对其进行缩放并将其分配为背景图像的 uri?

html - 图像的条件 CSS 样式取决于其*原始*宽度或高度

javascript - 上传前调整图片大小

java - Android:带有 ViewHolder、OnCheckedChangedListener 和 TextChangedListener 的自定义适配器

java - 使用服务器进行回合制游戏 (Android) - 如何存储数据?

c# - 寻找图像直方图中的峰值