Чтобы масштабировать BufferedImage в Java, вы можете использовать несколько методов. Вот некоторые из них:
-
Использование Graphics2D и AffineTransform:
import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.awt.geom.AffineTransform; public BufferedImage scaleImage(BufferedImage image, int width, int height) { BufferedImage scaledImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = scaledImage.createGraphics(); graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2D.drawImage(image, 0, 0, width, height, null); graphics2D.dispose(); return scaledImage; }
-
Использование Image#getScaledInstance:
import java.awt.Image; import java.awt.image.BufferedImage; public BufferedImage scaleImage(BufferedImage image, int width, int height) { Image scaledImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = bufferedImage.createGraphics(); graphics2D.drawImage(scaledImage, 0, 0, null); graphics2D.dispose(); return bufferedImage; }
-
Использование ImageIO и AffineTransformOp:
import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; import java.io.IOException; public void scaleImage(String inputImagePath, String outputImagePath, int width, int height) throws IOException { File inputFile = new File(inputImagePath); BufferedImage inputImage = ImageIO.read(inputFile); BufferedImage outputImage = new BufferedImage(width, height, inputImage.getType()); AffineTransform transform = new AffineTransform(); transform.scale((double) width / inputImage.getWidth(), (double) height / inputImage.getHeight()); AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); outputImage = op.filter(inputImage, outputImage); File outputFile = new File(outputImagePath); ImageIO.write(outputImage, "jpg", outputFile); }
Эти методы предоставляют различные способы масштабирования BufferedImage в Java. Выберите метод, который лучше всего соответствует вашим потребностям.