Redimensionar uma imagem em Java
-
Redimensione e mostre uma imagem em Java usando
BufferedImage.getScaledInstance() -
Redimensione a imagem e salve no diretório local em Java usando
Graphics2DeImageIO
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:

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:

Imagem após redimensionamento:

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