Во-первых, ваши вопросы:
Вид. Прежде всего, методы ImageIO.read(...)
являются удобными методами, которые будут декодировать первое изображение в файле, используя все параметры по умолчанию для декодирования. Поскольку все операции ImageIO.read(...)
делегированы для форматирования определенных плагинов или ImageReader
экземпляров (например, JPEGImageReader
), это может быть конкретным плагином. Но общий случай заключается в том, что данные изображения передаются и декодируются «на лету». Обратите внимание, что здесь нет «расчета размера», скорее всего, полное изображение декодируется на BufferedImage
в этом случае. Так много данных, необходимых для декодирования первого изображения в файле, должно быть переведено, но необязательно хранится в любом месте на компьютере, кроме значений декодированного пикселя.
От этого зависит. Существует настройка ImageIO.setUseCache(boolean)
, которая контролирует, кэшируются ли данные на диске или в ОЗУ.
- Если параметр
true
, данные временно хранятся на диске, обычно в директории темпа по умолчанию (см java.io.tempdir
свойства системы).
- Если настройка
false
, данные временно сохраняются в памяти при декодировании изображения.
Нет, если у вашего сервера нет специального API, чтобы предоставить вам эти данные, и вы выполняете определенные запросы к этому API. Однако API ImageIO
имеет намного более гранулированные методы, которые позволяют намного быстрее получать размеры изображения, без загрузки/декодирования всего изображения спереди.
Чем быстрее способ получения размеров изображения является:
try (InputStream stream = url.openStream()) {
// The "useCache" setting will decide whether "input" below
// will be disk or memory cached
try (ImageInputStream input = ImageIO.createImageInputStream(stream)) {
ImageReader reader = ImageIO.getImageReaders(input).next(); // TODO: Handle no reader
try {
reader.setInput(input);
// Get dimensions of first image in the stream, without decoding pixel values
int width = reader.getWidth(0);
int height = reader.getHeight(0);
}
finally {
reader.dispose();
}
}
}
Опять же, в зависимости от формата изображения, приведенный выше код должен читать только как большая часть заголовка/мета-данных, как это необходимо, чтобы определить, размеры изображения. Большинство реализаций ImageReader
будут читать все данные заголовка для этого, но все же это намного быстрее и требует намного меньше данных (и памяти), чем декодирования всего изображения.
Это трудно сделать какие-либо предположения относительно того, сколько данных или должен быть загружен, потому что различные форматы имеют заголовки разного размера, основного транспорта (то есть. HTTP) может передавать данные в «куски» и т.д.
Нет метода 'ImageIO.read()' – wero
@wero, конечно, я имею в виду что-то вроде 'ImageIO.read (новый URL-адрес («% IMG_URL% »)). GetHeight();' –
ответ находится в ' ImageIO.read (URL) 'Javadoc и реализация. JDK поставляется с исходным кодом. – wero