Я бы действительно рекомендовал посмотреть imgscalr .
Он выпущен по лицензии Apache 2, размещен на GitHub , уже развернут в нескольких веб-приложениях, имеет очень простой, но документированный API , имеет код которая работает с 2 основными ошибками изображения в JDK для вас прозрачно, что вы когда-либо заметите, только если вдруг начнете получать «черные» изображения после операции масштабирования или ужасно выглядящих результатов, дадут вам наилучшие возможные результаты, доступные в Java, доступен через Maven, а также через ZIP и представляет собой один класс.
Основное использование выглядит так:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, 320);
Это самый простой вызов, при котором библиотека делает точные предположения о качестве, учитывает пропорции вашего изображения и помещает результат в ограничивающий прямоугольник 320x320. ПРИМЕЧАНИЕ: ограничивающий прямоугольник - это только максимальное используемое значение W / H, поскольку пропорции вашего изображения соблюдаются, результирующее изображение все равно будет учитывать это, например, 320x200.
Если вы хотите переопределить автоматический режим и заставить его получить лучший результат и даже применить к нему очень мягкий фильтр сглаживания, чтобы он выглядел еще лучше (особенно хорошо для миниатюр), этот вызов будет выглядеть:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, Method.QUALITY,
150, 100, Scalr.OP_ANTIALIAS);
Это всего лишь примеры, API является широким и охватывает все: от очень простых вариантов использования до очень специализированных. Вы даже можете передать свои собственные BufferedImageOps, которые будут применены к изображению (и библиотека автоматически исправит 6-летнюю ошибку BufferedImageOp JDK для вас!)
Существует гораздо больше возможностей для успешного масштабирования изображений в Java, чем делает библиотека, например, всегда сохраняя изображение в одном из наилучших поддерживаемых типов изображений RGB или ARGB при работе с ним. Под прикрытием конвейер обработки изображений Java2D возвращается к подчиненному программному конвейеру, если тип изображения, используемый для любых операций с изображениями, плохо поддерживается.
Если все это звучало как сильная головная боль, это вроде бы ... вот почему я написал библиотеку и открыл ее из открытых источников, чтобы люди могли просто изменять размеры своих изображений и продолжать жить, не беспокоясь об этом .
Надеюсь, это поможет.