Привет! Сегодня я расскажу, как при помощи java.awt.image изменить размер изображения в java.
1. Получим изображение
Для начала нужно получить сам файл. Сделать это можно несколькими способами:
Прочитать из файла:
BufferedImage image =
ImageIO.read(new File("project/images/image.png"))
Передать файл в виде URL:
BufferedImage image =
ImageIO.read("https://some-images.com/image")
Или передать InputStream, если у вас уже есть загруженное изображение.
2. Изменим размер изображения.
Для начала необходимо создать пустой холст, куда будет перезаписываться изображение уже нужного размера.
val resizedImage = BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB)
Здесь targetWidth и targetHeight - ширина и высота изображения в пикселях.
BufferedImage.TYPE_INT_RGB - используемая цветовая модель.
Примеры самых используемых цветовых моделей:
TYPE_INT_RGB - 8-битные цветовые компоненты RGB, упакованные в целые пиксели, не поддерживает прозрачность.
TYPE_INT_ARGB - 8-битные цветовые компоненты RGB, упакованные в целые пиксели, с поддержкой прозрачности.
Подробнее можно посмотреть в https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html
Дальше необходимо создать экземпляр graphics2D
val graphics2D = resizedImage.createGraphics()
и записать в него данные из оригинального изображения
graphics2D.drawImage(image, 0, 0, targetWidth, targetHeight, null)
после -- применить правки при помощи dispose
graphics2D.dispose()
Готово. Теперь полученное изображение необходимо сохранить.
3. Сохранение изображения.
Сохранить полученное изображение можно при помощи такой конструкции:
ImageIO.write(image, "png", new File(“image/new-file.png”))
ImageIO.write позволяет записывать результат не только в файл, но и ByteArrayOutputStream, это может позволить переслать изображение куда-либо не сохраняя промежуточный файл.