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

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

URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;

Ответы [ 3 ]

111 голосов
/ 13 октября 2009
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 за предложение

15 голосов
/ 13 октября 2009

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

1 голос
/ 13 октября 2009

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

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

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

...