如何使用java压缩图像?

从pagespeed我只获得图像链接和可能的字节和百分比优化,如压缩和resizehttps://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 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客户端

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

有颜色压缩(“压缩质量”)并且存在分辨率压缩(“resize”)。 Fujy的答案涉及压缩质量,但这并不是主要节省的原因:主要的节省来自于调整尺寸。 例如,我使用fujy的答案使用最大压缩质量获得了一张4mb照片到207K,看起来很糟糕,但是我使用合理的质量但是更小的尺寸将它降低到12K。

所以上面的代码应该用于“压缩质量”,但这是我建议resize:

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

我希望resize是标准Java库的一部分,但它似乎不是,(或标准方法存在图像质量问题?)。 但是里亚德的图书馆真的很小 – 它只是一个class级。 我只是将这个类复制到我的项目中,因为我从来没有学过如何使用Maven,而且效果很好。

Interesting Posts