Java / ImageIO получать размеры изображения без чтения всего файла?

Есть ли способ получить размеры изображения без чтения всего файла?

URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
13.10.2009 10:01:31
Вы пытались обрезать содержимое изображения, просто передавая небольшую часть, скажем, 10 КБ, изображения в ImageIO.read?
Mohsen 13.10.2009 10:11:33
3 ОТВЕТА
РЕШЕНИЕ
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 за предложение

113
7.02.2015 16:57:50
Круто ... Ваш код отлично сработал. Я пробовал пару кодов, но эти коды не работают в некоторых случаях. Вы сэкономили мое время ... Спасибо.
vissu 20.12.2011 12:02:05
Представленный код выдает предупреждение в Eclipse: Iterator является необработанным типом. Ссылки на универсальный тип Iterator <E> должны быть параметризованы. Опции исправления, предлагаемые Eclipse: переименование в файле (Ctrl + 2, прямой доступ к R), добавление параметров типа в «Iterator», добавление аргументов общего типа…, добавление @SuppressWarnings «unchecked» в «methodNameHere». Что такое синтаксически правильное исправление?
David 22.08.2012 23:40:15
Также фрагмент кода не упоминает ссылки на классы, необходимые для использования кода. Из Eclipse выглядит так: import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream;
David 22.08.2012 23:41:08
@ Сэм Барнум. Как вы получаете параметр 'resourceFile' без загрузки всего изображения? OP начинается с произвольного URL, а не с файла.
E L 11.04.2015 22:40:13
@EL принимает файл, доступный для чтения RandomAccessFile или InputStream
Sam Barnum 13.04.2015 15:41:34

Вы должны изучить ImageReader.getImageMetadata(). К сожалению, API Java Image совсем не прост в использовании.

Вы можете найти описания форматов метаданных в документации пакета javax.imageio.metadata.

Есть сторонние библиотеки, которые проще в использовании, такие как MediaUtil (последний раз обновлялся 3 года назад, но у меня он работал хорошо).

1
17.08.2012 06:49:08

Использование ImageReader.getHeight (int) и ImageReader.getWidth (int) обычно только читает заголовок изображения (я смотрю на источники JDK6). Так что ImageReader , скорее всего, лучший выбор.

16
13.10.2009 10:23:32