Dar*_*tel 8 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或图像处理工具)来压缩图像,这样,我可以获得谷歌建议的压缩版图像.
提前致谢.
fuj*_*ujy 14
您可以使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到更多相关细节
还有一些像这样的第三方工具
编辑:如果您想PageSpeed在您的应用程序中使用Google ,它可用作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
有颜色压缩(“压缩质量”)和分辨率压缩(“调整大小”)。Fujy 的回答涉及压缩质量,但这不是主要节省的地方:主要节省来自缩小到更小的尺寸。例如,我使用 fujy 的答案使用最大压缩质量将 4mb 的照片压缩到 207K,看起来很糟糕,但我使用合理的质量但较小的尺寸将其降低到 12K。
所以上面的代码应该用于“压缩质量”,但这是我调整大小的建议:
https://github.com/rkalla/imgscalr/blob/master/src/main/java/org/imgscalr/Scalr.java
我希望调整大小是标准 Java 库的一部分,但似乎不是,(或者标准方法存在图像质量问题?)。但利雅得的图书馆真的很小——只有一个班级。我只是将这个类复制到我的项目中,因为我从未学习过如何使用 Maven,而且它运行良好。
| 归档时间: |
|
| 查看次数: |
17738 次 |
| 最近记录: |