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
Graphics2D
eImageIO
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