Я действительно рекомендую давая imgscalr вид.
Он выпущен под лицензией Apache 2, размещенный на GitHub, были развернуты в нескольких веб-приложений уже имеет очень простой, но pedantically documented 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-летнюю ошибку BufferImageOp JDK для вас!)
Существует гораздо больше возможностей для масштабирования изображений в Java, для вас, например, всегда сохраняя изображение в одном из лучших поддерживаемых типов изображений RGB или ARGB во время работы на нем. Под защитой конвейер обработки изображений Java2D возвращается к более низкому программному конвейеру, если тип изображения, используемый для любых операций с изображениями, плохо поддерживается.
Если все, что звучит как большая головная боль, это своего рода ... вот почему я написал библиотеку и открыл ее, поэтому люди могли просто изменять размеры своих изображений и продолжать свою жизнь, не беспокоясь о Это.
Надеюсь, что это поможет.
В примере, который вы цитируете, используется 'getScaledInstance()', а не AffineTransform. Так что это? Я читал смешанные рецензии, что 'getScaledInstance' не так впечатляет ... – gdbj