从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或图像处理工具)所以,我可以获得谷歌建议的压缩版图像。
提前致谢。
答案 0 :(得分:13)
您可以使用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://developers.google.com/api-client-library/java/apis/pagespeedonline/v1
答案 1 :(得分:3)
有颜色压缩(“压缩质量”)并且存在分辨率压缩(“调整大小”)。 Fujy的答案涉及压缩质量,但这并不是主要节省的原因:主要节省来自于调整尺寸缩小。例如。我使用fujy的答案使用最大压缩质量得到了一张4mb照片到207K,它看起来很糟糕,但是我使用合理的质量但尺寸更小将它降低到12K。
所以上面的代码应该用于“压缩质量”,但这是我建议调整大小:
https://github.com/rkalla/imgscalr/blob/master/src/main/java/org/imgscalr/Scalr.java
我希望调整大小是标准Java库的一部分,但它似乎不是,(或标准方法存在图像质量问题?)。但是里亚德的图书馆真的很小 - 它只是一个班级。我只是将这个类复制到我的项目中,因为我从来没有学过如何使用Maven,而且效果很好。
答案 2 :(得分:1)
作为解决此问题的方法,我建议使用TinyPNG的API。
您可以将其用于压缩和调整图像大小。