Java/ImageIO получает размеры изображения без чтения всего файла?
Есть ли способ получить размеры изображения без чтения всего файла?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
Ответы
Ответ 1
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 за предложение
Ответ 2
Использование ImageReader.getHeight(int) и ImageReader.getWidth(int ) обычно читает только заголовок изображения (я смотрю на источники JDK6). Поэтому ImageReader, скорее всего, лучший выбор.
Ответ 3
Вам нужно будет заглянуть в ImageReader.getImageMetadata()
. К сожалению, API-интерфейс Java API совсем не прост в использовании.
Вы можете найти описания форматов метаданных в документации пакета javax.imageio.metadata
.
Существуют более простые в использовании библиотеки сторонних разработчиков, такие как MediaUtil (последнее обновление 3 года назад, но оно работало хорошо для меня).