ImageIO.read() занимает около 13000 мс для файла изображения размером 5.XMB. Как я могу улучшить эту производительность?

Я хочу прочитать File в BufferedImage, поскольку я хочу изменить размер своего изображения. Для операции изменения размера мне нужно получить файл BufferedImage.

Итак, я использовал ImageIO.read(file), но это занимает более 10000 мс, когда размер файла превышает 5 МБ. Это мой код:

...

public BufferedImage change(File file) {
    return ImageIO.read(file);
}

...

Я не понимаю, почему это занимает так много времени. И я хочу знать, как улучшить его производительность...


person kiseok    schedule 31.05.2021    source источник
comment
Эти сообщения могут быть связаны с вашей проблемой: stackoverflow.com/questions/44170127/ и stackoverflow.com/questions/40468494/why-imageio-read-sooo-slow   -  person Junior Dussouillez    schedule 31.05.2021
comment
эти решения мне не помогли... @JuniorDussouillez   -  person kiseok    schedule 31.05.2021
comment
Можно попробовать сначала загрузить в память. См. stackoverflow.com/questions/62852645/   -  person DuncG    schedule 31.05.2021
comment
Можете ли вы поделиться изображением (файлом), который вызывает эту производительность? Отключение кэширования диска может немного помочь, но, вероятно, проблема заключается в способе кодирования изображения.   -  person Harald K    schedule 31.05.2021
comment
unsplash.com/photos/a-QH9MAAVNI Вот ссылка, по которой я скачал изображение для тестирования размером более 5 МБ. @ХаральдК   -  person kiseok    schedule 01.06.2021
comment
Я решил эту проблему с помощью решения @DuncG. Я прочитал файл в ImageIcon. ImageIcon можно изменить на Image. Насколько я понимаю, BufferedImage расширяет Image. Итак, я читаю «Файл в изображение».   -  person kiseok    schedule 01.06.2021
comment
ImageIcon использует Toolkit.createImage(URL) под капотом. Основное отличие от ImageIO заключается в том, что он загружает изображение асинхронно. Вам не нужно скрывать, что происходит, но вы можете использовать этот метод напрямую.   -  person Holger    schedule 01.06.2021
comment
Спасибо @kiesok. Наконец-то нашел время протестировать. На моем компьютере ваше изображение читается примерно за 5,6 с с использованием стандартного ImageIO. И ~1,7 с при использовании моего плагина TwelveMonkeys JPEG ImageIO. К сожалению, использование Toolkit.getImage() и правильное преобразование в BufferedImage занимает 360 мс. Есть куда расти...   -  person Harald K    schedule 03.06.2021