我正在Java中生成很多图像,并通过 ImageIO.write 这样的方法:

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

我对结果感到满意,直到Google的Firefox插件“页面速度”告诉我,如果我优化图像,我可以节省多达60%的尺寸。图像是QR码,它们的大小约为900B,而Firefox-Plugin优化版本约为300B。我想直接从Java节省此类优化的300B图像。

因此,在这里我的问题再次:如何使用Java的Imageio保存优化的PNG图像?

有帮助吗?

解决方案

采用 pngencoderb 将您的BufferedImage转换为PNG编码的字节数组。

您可以将过滤器应用于它,这有助于准备图像以更好地优化。这就是Optipng所做的,只有Optipng计算哪个过滤器将为您提供最佳的压缩。

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

将图像获取到编码的字节数组中后,您可以将其直接写入文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top