好的,这是我的发现到目前为止(老实说,他们有点担心…).
使用与Oracle JRE捆绑在一起的ImageIO的标准JPEG插件:
BufferedImage image = ImageIO.read(file);
在我的电脑(MacBookPro / 2.8GHz i7)上大约18秒钟内读取图像.
使用我的JPEG plugin for ImageIO,它使用一个稍微不同的代码路径(即,您可以通过获取ImageReader并调用readRaster()方法获得相同的结果,然后从中创建一个BufferedImage,代码是不平凡的,所以请参考在项目页面上,如果你想看到代码):
BufferedImage image = ImageIO.read(file);
在我的电脑上大概读取8秒钟的图像.
BufferedImage image = new BufferedImageFactory(Toolkit.getDefaultToolkit().createImage(file.getAbsolutePath())).getBufferedImage();
在我的电脑上读取约2.5秒的图像.
使用sun.awt.codec中已弃用的JPEGImageDecoder类:
BufferedImage image = new JPEGImageDecoderImpl(new FileInputStream(file)).decodeAsBufferedImage();
在我的电脑上读〜约1.7秒的图像.
所以,这意味着我们应该能够在不到2秒内读取这个图像,即使在Java中也是如此.在这种情况下,JPEGImageReader的性能是可笑的,我真的很想知道为什么.如已经提到的,似乎必须用逐行解码,但仍然应该比这更好.
更新:
只是为了乐趣,我创建了一个由LibJPEG-T