FWIW Я только что выпустил (Apache 2, размещенный на GitHub) простую библиотеку для масштабирования изображений для Java под названием imgscalr (доступна на Maven central ).
В библиотеке реализовано несколько различных подходов к масштабированию изображений (в том числе инкрементальный подход Криса Кэмпбелла с несколькими незначительными улучшениями), и он либо выберет наиболее оптимальный для вас подход, если вы попросите об этом, либо предоставит вам самый быстрый или лучший внешний вид. (если вы попросите об этом).
Использование очень просто, просто набор статических методов. Простейший вариант использования:
BufferedImage scaledImage = Scalr.resize(myImage, 200);
Все операции сохраняют исходные пропорции изображения, поэтому в этом случае вы просите imgscalr изменить размер изображения в пределах ширины 200 пикселей и высоты 200 пикселей, и по умолчанию он автоматически выберет наиболее подходящий и быстрый подход для этого. так как он не был указан.
Я с самого начала понимаю, что это выглядит как самореклама (так оно и есть), но я потратил большую часть времени на поиск этой же темы и продолжал придумывать разные результаты / подходы / мысли / предложения и решил сесть и напишите простую реализацию, которая бы охватывала 80-85% сценариев использования, когда у вас есть изображение и, возможно, вам нужен его миниатюрный рисунок - либо максимально быстро, либо максимально привлекательно выглядящий (для тех, кто пробовал, вы Вы заметите создание Graphics.drawImage даже с интерполяцией BICUBIC на достаточно маленькое изображение, оно все равно выглядит как мусор).