4

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

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

我对结果很满意,直到 Google 的 Firefox 插件“Page Speed”告诉我,如果我优化图像,我最多可以节省 60% 的大小。图片是二维码,大小约为 900B,firefox-plugin 优化版本约为 300B。我想直接从java中保存这样优化的300B图像。

所以我的问题又来了:如何使用 java 的 ImageIO 保存优化的 png 图像?

4

1 回答 1

4

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

您可以对其应用过滤器,这有助于准备图像以进行更好的优化。这就是 OptiPNG 所做的,只有 OptiPNG 会计算哪个过滤器会为您提供最佳压缩。

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

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

于 2010-04-21T17:45:17.360 回答