Java不加载图片,只获取宽高
Get Width and Height without Load Entire Image in Java
Java中获取图片宽高通常使用以下方法:
File file = new File("图片路径");
BufferedImage bufferedImage = ImageIO.read(file);
int width = bufferedImage.getWidth();
int height = bufferedImage.getHeight();
⚠️但是,其中的 ImageIO.read
方法会将图片整体加载到内存中,因此在处理大图片时,可能会占用很多内存,导致OOM。
因此我们可以使用以下方法,不加载图片,只获取宽高:
File file = new File("图片路径");
try (ImageInputStream inputStream = ImageIO.createImageInputStream(file);) {
Iterator<ImageReader> readers = ImageIO.getImageReaders(inputStream);// 获取支持该图片的解码器
if (readers.hasNext()) {
ImageReader reader = readers.next();// 得到一个解码器
try {
reader.setInput(inputStream);// 设置解码器的输入数据
int width = reader.getWidth(0);
int height = reader.getHeight(0);
} finally {
reader.dispose();// 关闭解码器,释放资源
}
}
}
方法来源
https://stackoverflow.com/questions/1559253/java-imageio-getting-image-dimensions-without-reading-the-entire-file/1560052#1560052