Изменение размеров изображений
При помощи утилиты Thumbnailator
Иногда в приложении может потребоваться "на-лету" менять размер изображения. Предположим, например, что на сервер в базу данных позволено пользователям загружать картинки. Они могут при этом грузить изображения различного разрешения, но нам необходимо приводить их все к одному знаменателю, например, по ширине. И кроме того, делать из этих картинок превьюшки.
В этом нам поможет хорошая утилита Thumbnailator, которая сделает за нас всю работу и превратит решение проблемы в пять минут.
Напишем небольшой метод, позволяющий нам менять размер картинки в любую сторону.
- img
- Изображение в байтах.
- w
- Ожидаемая итоговая ширина изображения.
- t
- Условие изменения.
import net.coobird.thumbnailator.Thumbnails; public final class FileUtil { public static final int RESIZE_ALL = 0; public static final int RESIZE_ONLY_MINIMIZE = 1; public static final int RESIZE_ONLY_MAXIMIZE = 2; public final static byte[] resizeImage (byte[] img, int w, int t) throws IOException { ByteArrayInputStream is = new ByteArrayInputStream(img); ByteArrayOutputStream os = new ByteArrayOutputStream(); BufferedImage originalImage = ImageIO.read(is); switch (t) { case RESIZE_ONLY_MINIMIZE: if (originalImage.getWidth() <= w) return img; break; case RESIZE_ONLY_MAXIMIZE: if (originalImage.getWidth() >= w) return img; break; case RESIZE_ALL: if (originalImage.getWidth() == w) return img; } int h = w*originalImage.getWidth()/originalImage.getHeight(); Thumbnails.of(originalImage).size(w, h).outputFormat("png").toOutputStream(os); return os.toByteArray(); } }
Высоту результирующей картинки мы вычисляем в пропорции к заданной ширине. И также можем указать, в каком случае необходимо менять размер: то ли только уменьшить картинку, если она слишком большая, то ли только увеличить, то ли менять размер в любом случае, если заданная ширина не совпадает с изначальной.
- Тэги: изображение, утилита
Комментарии (0)