2010-04-21 74 views
4

我产生大量java中的图像和保存他们通过ImageIO.write方法是这样的:如何用java的ImageIO保存优化的PNG图像?

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

我很满意的结果,直到谷歌的Firefox插件“网页速度”告诉我,我可以节省高达60如果我优化图像的大小的百分比。图像是QR码,它们的大小约为900B,而firefox-plugin优化版本大约为300B。 我想直接从java保存这样优化的300B图像。

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

+1

如果您可以使用'System'调用外部可执行文件,则使用OptiPNG。 – 2010-04-21 16:57:07

回答

4

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

您可以对其应用滤镜,以帮助准备图像以获得更好的优化效果。这就是OptiPNG所做的,只有OptiPNG计算哪种滤波器可以获得最佳压缩效果。

您可能需要尝试应用每个过滤器来查看哪个过滤器对您来说一直更好。对于2位颜色,我认为唯一可能帮助的过滤器是“上”,所以我猜测这是一个可以使用的过滤器。

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

+0

这似乎是非常荒谬的过时信息 - 甚至在提出此问题之前已过时:_“此功能现在包含在Java 1.4.1附带的javax.imageio库中,但PngEncoder可能对那些不想要的用户有用要求最新版本的Java“。(Java 1.4.1于2002年发布) – 2016-07-15 01:40:49