Методы масштабирования BufferedImage в Java

Чтобы масштабировать BufferedImage в Java, вы можете использовать несколько методов. Вот некоторые из них:

  1. Использование 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;
    }
  2. Использование 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;
    }
  3. Использование 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. Выберите метод, который лучше всего соответствует вашим потребностям.