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

 

文章评论
${fromAuthor ? '郄正元' : '游客'} 作者 ${gmtCreate}
${content}
${subList.length}
发表评论
${commentToArticle ? '' : parentContent}
字数:0/${maxCommentLength}
该邮箱地址仅用于接收其他用户的回复提醒,不会泄露