HOWTO · Java
Redimensionar uma imagem em Java
Este tutorial mostra as técnicas para 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:
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: