2

我维护了一个生成大量小部件的 Java 应用程序(我说小部件是因为它会生成 PDF 或 PNG 文件 - 到磁盘)。该应用程序旨在生成 PDF 和后来的图像成为一个要求。

生成图像时,我的每秒事务数 (TPS) 受到影响。基本流程是我创建了一个 BufferedImage 和 Graphics2D 实例。使用 Graphics2D 对象绘制一些文本。我拉入了一些其他图像以添加到我的新图像中。然后我将 BufferedImage 写入到 OutputStream。

我已经将 ImageIO.write() 方法视为可能的罪魁祸首。该应用程序是 RESTful 的,整个事务可能需要 500 毫秒。我已经为 ImageIO.write() 方法计时,以占用该事务时间的至少 80-90%。

ImageIO.write(image,"PNG",os);  // 420ms !!!!

我很难找到解决 ImageIO.write() 的方法......任何建议都值得赞赏。

注意:图像是 RGB ColorModel && 最终大小约为 50kb。我已经看到二进制颜色模型的性能更好,但颜色是必需的。

4

2 回答 2

1

Just to back up jonwilks' link to ObjectPlanet's "PngEncoder" - we tested it and had similar results, roughly 30-50% improvement over ImageIO.write which is pretty awesome - and it's free when you use the binary only. Recommended.

于 2013-02-06T15:41:12.663 回答
0

我也看到,PNG 上的 ImageIO 很慢,JPEG 更快,但我认为 PNG 更适合文本。

你可以试试JMagick。也可以维护 ImageIO API,因为它可以处理多个用于写入/读取图像 mime 类型的提供程序。

我没有尝试但可能会有所帮助的一件事是将缓存目录设置为快速 RAM 磁盘:ImageIO.setCacheDirectory(ramdisk)setUseCache(false).

于 2012-12-18T23:50:58.267 回答