如何使用java的ImageIO保存优化的png图像?

时间:2010-04-21 16:48:39

标签: java image png pagespeed

我在java中生成大量图像并通过ImageIO.write方法保存它们,如下所示:

final BufferedImage img = createSomeImage();
ImageIO.write( img, "png", new File( "/some/file.png" );

我对结果感到满意,直到Google的firefox插件'Page Speed'告诉我,如果我优化图像,我可以节省高达60%的尺寸。图像是QR码,每个大小约为900B,firefox-plugin优化版本大约为300B。 我想直接从java保存这些优化的300B图像。

所以我再次提出问题:如何使用java的ImageIO保存优化的png图像?

1 个答案:

答案 0 :(得分:4)

使用PngEncoderB将BufferedImage转换为PNG编码的字节数组。

您可以对其应用过滤器,这有助于准备图像以便更好地进行优化。这就是OptiPNG所做的,只有OptiPNG计算出哪种滤波器能为您带来最佳压缩效果。

您可能需要尝试应用每个过滤器,以确定哪个过滤器始终更适合您。使用2位颜色,我认为可能有帮助的唯一过滤器是“向上”,所以我猜这是使用的那个。

将图像转换为PNG编码的字节数组后,您可以直接将其写入文件。