Redimensionar uma imagem em Java

Rupam Yadav 12 outubro 2023
  1. Redimensione e mostre uma imagem em Java usando BufferedImage.getScaledInstance()
  2. Redimensione a imagem e salve no diretório local em Java usando Graphics2D e ImageIO
Redimensionar uma imagem em Java

Java pode realizar várias operações de diferentes tipos, como leitura, gravação ou exclusão de um arquivo. Nos exemplos a seguir, demonstraremos como você pode redimensionar uma imagem em Java usando três técnicas.

Redimensione e mostre uma imagem em Java usando BufferedImage.getScaledInstance()

No primeiro exemplo, redimensionamos uma imagem e a mostramos dentro de um quadro sem salvá-la em nenhum lugar. Aqui, criamos um objeto bufferedImage da classe BufferedImage. A classe BufferedImage estende a classe Image que representa as imagens gráficas como um array de pixels retangulares. Para ler a imagem, usamos a função ImageIO.read(). Aqui, o ImageIO é uma classe que contém métodos estáticos como read e write para realizar operações de entrada e saída.

Obtemos nossa imagem usando o método new File() que chama o construtor da classe File e passa a localização da imagem como um argumento nela. Depois de obter o objeto bufferedImage, o usamos para chamar o método getScaledInstance() que cria uma versão em escala da imagem.

A função getScaledInstance leva três argumentos: os dois primeiros são a largura e a altura em pixels que queremos dar à imagem, e o último argumento é o algoritmo a ser usado para dimensionamento. Aqui, usamos a função Image.SCALE_DEFAULT, que diz à classe para usar o algoritmo de amostragem padrão.

Feito isso, criamos uma janela para mostrar a imagem usando o objeto JFrame. Definimos o layout do objeto frame como FlowLayout, que organiza os componentes em uma linha. Em seguida, definimos o tamanho da janela; note que este tamanho deve ser maior do que a altura e largura da imagem para mostrar a imagem completamente.

Finalmente, para mostrar a imagem, criamos um objeto de JLabel e chamamos a classe section que define a imagem como um ícone. Por fim, adicionamos o objeto jLabel ao objeto frame e definimos a visibilidade como verdadeira.

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    new ResizeImageExample();
  }

  public ResizeImageExample() throws IOException {
    BufferedImage bufferedImage = ImageIO.read(new File("C:\\Users\\User1\\Pictures\\java.png"));
    Image image = bufferedImage.getScaledInstance(600, 400, Image.SCALE_DEFAULT);

    ImageIcon icon = new ImageIcon(image);
    JFrame frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.setSize(800, 600);

    JLabel jLabel = new JLabel();
    jLabel.setIcon(icon);
    frame.add(jLabel);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Resultado:

java resize image 1

Redimensione a imagem e salve no diretório local em Java usando Graphics2D e ImageIO

No segundo método, usamos a classe Graphics2D para criar gráficos. O primeiro passo é obter o arquivo de imagem usando o método ImageIo.read() que recebe um objeto File como um argumento que contém o caminho da imagem. O ImageIo.read() retorna o objeto BufferedImage, bufferedImageInput. Criamos outro objeto BufferedImage para ser usado ao escrever a imagem. Recebe três argumentos: a altura, a largura e o tipo de imagem.

Agora chamamos o método createGraphics() usando o objeto bufferdImageOutput que retorna um objeto Graphics2D, g2d. Em seguida, criamos a imagem com o método drawImage() que leva seis argumentos. O primeiro é o objeto BufferedImage, o segundo e o terceiro são as coordenadas x e y que aumentam de acordo com o tamanho se ambos os valores forem zero. O quarto e quinto argumentos representam a nova altura e largura que queremos dar à imagem, e o último argumento é o ImageObserver que é null no nosso caso.

Antes de prosseguir, eliminamos todo o contexto e recursos usados ​​por g2d usando a função g2d.dispose(). Para salvar a imagem redimensionada no diretório local, usamos a função ImageIo.write() que pega o objeto bufferedImageOutput, o nome a ser dado ao novo arquivo de imagem e o construtor File com o caminho do arquivo.

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    resizeFile("C:\\Users\\Rupam Saini\\Pictures\\java.png",
        "C:\\Users\\Rupam Saini\\Pictures\\java-resized.png", 500, 500);
  }

  public static void resizeFile(String imagePathToRead, String imagePathToWrite, int resizeWidth,
      int resizeHeight) throws IOException {
    File fileToRead = new File(imagePathToRead);
    BufferedImage bufferedImageInput = ImageIO.read(fileToRead);

    BufferedImage bufferedImageOutput =
        new BufferedImage(resizeWidth, resizeHeight, bufferedImageInput.getType());

    Graphics2D g2d = bufferedImageOutput.createGraphics();
    g2d.drawImage(bufferedImageInput, 0, 0, resizeWidth, resizeHeight, null);
    g2d.dispose();

    String formatName = imagePathToWrite.substring(imagePathToWrite.lastIndexOf(".") + 1);

    ImageIO.write(bufferedImageOutput, formatName, new File(imagePathToWrite));
  }
}

Imagem antes de redimensionar:

java resize image 2

Imagem após redimensionamento:

java resize image 3

Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artigo relacionado - Java Image