我正在使用一些应用程序,我在本地系统上加载了多个图像URL。我需要获得我正在使用ImageIO.read(File)的每个图像的高度和宽度。 这样可以完成工作,但首先将完整的图像加载到内存中,然后让我获取数据。 但是,我想知道是否有任何方法可以在不加载或部分将图像加载到内存中的情况下获取图像尺寸。
答案 0 :(得分:1)
获取ImageInputStream非常简单。给定File或InputStream形式的输入源,调用产生ImageInputStream:
Object source; // File or InputStream
ImageInputStream iis = ImageIO.createImageInputStream(source);
获得信息源后,可以通过以下方式将其附加到读者:
reader.setInput(iis, true);
如果源文件包含多个图像且应用程序无法保证按顺序读取它们,则应将第二个参数设置为false。对于只允许将单个图像存储在文件中的文件格式,传递值为true始终是合法的。
一旦阅读器设置了输入源,我们就可以使用它来获取有关图像的信息,而不必将图像数据读入内存。例如,调用
reader.getImageWidth(0)
和reader.getImageHeight(0)
允许我们分别获取存储在文件中的第一个图像的宽度和高度。一个编写良好的插件将尝试仅解码确定图像宽度所需的文件,而不读取任何像素。