如何使用Java压缩图像?
image
image-processing
java
5
0

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

提前致谢。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

有颜色压缩(“压缩质量”)和分辨率压缩(“调整大小”)。 Fujy的答案涉及压缩质量,但这不是主要节省的地方:主要节省是通过缩小尺寸来减小的。例如,使用fujy的答案,使用最大压缩质量,我得到了一张4mb的照片,达到207K,看起来很糟糕,但是使用合理的质量却将其减小到了12K,但尺寸较小。

因此,以上代码应用于“压缩质量”,但这是我建议调整大小的方法:

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

我希望调整大小是标准Java库的一部分,但似乎不是,(或者标准方法是否存在图像质量问题?)。但是Riyad的图书馆很小-只有一堂课。我只是将此类复制到我的项目中,因为我从未学习过如何使用Maven,而且效果很好。

收藏
评论

您可以使用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客户端

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号