有没有办法在不读取整个文件的情况下获取图像的尺寸?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
有没有办法在不读取整个文件的情况下获取图像的尺寸?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
try(ImageInputStream in = ImageIO.createImageInputStream(resourceFile)){
final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
if (readers.hasNext()) {
ImageReader reader = readers.next();
try {
reader.setInput(in);
return new Dimension(reader.getWidth(0), reader.getHeight(0));
} finally {
reader.dispose();
}
}
}
感谢 sfussenegger 的建议
使用ImageReader.getHeight(int)和ImageReader.getWidth(int)通常只读取图像标题(我正在查看 JDK6 源)。所以ImageReader很可能是最好的选择。
你必须调查一下ImageReader.getImageMetadata()
。不幸的是,Java Image API 并不容易使用。
有一些更容易使用的第三方库,例如MediaUtil(最近一次更新是在 3 年前,但对我来说效果很好)。
ImageInputStream 和 ImageReader 的解决方案仍然不是那么有效,因为它们创建了 tmp 文件。当图像更大或并发性更高时,它会变得更慢,我建议使用元数据提取器。