【发布时间】:2015-06-24 15:36:03
【问题描述】:
使用javax.imageio.ImageIO 从磁盘加载高分辨率 (9000x9000) JPEG 时,在我的 scala 应用程序中需要超过 1 分钟。我尝试创建一个纯 Java 项目,但仍然需要很长时间 - 大约 30 秒。
这是我加载图像的方式:
File file = new File("/Users/the21st/slow2.jpg");
BufferedImage image = ImageIO.read(file);
有没有什么方法可以提高在 Java 中读取渐进式编码的大分辨率 JPEG 的性能?
有问题的图像是this one(版主,请不要再次重新上传到其他托管站点,以免编码/质量发生变化)
【问题讨论】:
-
@Bret 我没有意识到 StackOverflow 在上传到他们的服务器期间可能会调整大小和/或重新编码该图像。这是原始图像:dl.dropboxusercontent.com/u/73774/slow2.jpg(使用此链接编辑原始问题)
-
嗯,看来渐进式编码是罪魁祸首。如果我将您的样本重新编码为基线,则阅读时间会从 ~40s -> ~2s 下降。
-
可能你在 GC 搅动,尝试增加堆内存
-
我已投票决定重新开放。 “有没有比 ImageIO 更快的替代方法来加载 JPEG 图像?”不一定是对工具的推荐。我有很多编程建议。
-
由于使用了不同的代码路径,我的JPEG plugin for ImageIO 确实以大约两倍的速度读取图像(在我的计算机上 JRE:~18 秒,TM:~8 秒,ymmv)。这意味着如果您获得 JPEG 的 JRE
ImageReader并使用readRaster方法,您将看到同样的加速。似乎是由于渐进式编码,正如@barti_ddu 所指出的那样 PS:投票支持重新开放,但还不能回答......
标签: java jpeg javax.imageio