Я предполагаю, что вы пытаетесь уменьшить изображение большего размера до размера миниатюры или столь же большой разницы от исходного до масштабированного изображения?
Если это так, то эта тема была фактически затронута Крисом Кэмпбеллом из Java2D еще в 2007 году (я не ожидаю, что вы знали это, просто отмечая, что это общий вопрос), потому что новые подходы к масштабированию Java2D (RenderingHints.VALUE_INTERPOLATION_ *) ) не предоставил эквивалент устаревшего Image.getScaledInstance (SCALE_AREA_AVERAGING или SCALE_SMOOTH) подхода.
Как оказалось, подходы SCALE_AREA_AVERAGING или SCALE_SMOOTH в старом подходе Java 1.1 Image.getScaledInstance были довольно дорогой, многошаговой операцией, которая выполняла большую работу в фоновом режиме для генерации этого красивого изображения.
Крис отметил, что новый и «правильный» способ, с помощью Java2D, получить тот же результат - это постепенный процесс масштабирования изображения пополам снова и снова, пока не будет достигнут желаемый размер изображения, предпочтительно с использованием более высокого шкала качества, например RenderHints.VALUE_INTERPOLATION_BICUBIC или BILINEAR.
Результат получается практически идентичным оригинальному подходу Image.getScaledInstance, которого хотят люди.
На самом деле я пошел на поиски этого ответа несколько месяцев назад, когда писал сервис хостинга изображений, и был удивлен, насколько сложен простой вопрос: «Как сделать красивый эскиз в Java?» стал.
В конце концов я создаю небольшую библиотеку Java (Apache 2, с открытым исходным кодом), которая реализует 3 различных подхода к масштабированию изображений в Java с использованием «лучших практик», включая добавочный подход, предложенный Крисом.
Библиотека называется imgscalr . Вы можете скачать и использовать его так же просто, как:
BufferedImage thumbnail = Scalr.resize(srcImage, 150);
Есть больше опций для установки и использования (например, Качество или Скорость масштабирования), но из коробки есть интеллектуальные настройки по умолчанию для всего, чтобы создать для вас хорошо выглядящее масштабированное изображение, так что вам не придется беспокоиться о больше, если не хочешь. Библиотека также прилагает значительные усилия для того, чтобы избавиться и избежать любого выделения объектов, которое не является абсолютно необходимым, и немедленно избавиться от экземпляров BufferedImage, если в этом нет необходимости - она предназначена для того, чтобы быть кодом как частью долго работающего серверного приложения, так что это было критический.
Я уже сделал несколько выпусков библиотеки, и если вы предпочитаете просто вырывать "хорошие вещи" и делать что-то с ними самостоятельно, сделайте это. Это все на GitHub , и ни один из них не является совершенно секретным, просто попытка облегчить жизнь людям.
Надеюсь, это поможет.