Java Image I/O API: redimensionamento e corte de imagens | Guia

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com imagens em Java: redimensionamento (resize) e corte (crop)



No desenvolvimento web e desktop moderno em Java, surge frequentemente a necessidade de processar imagens programaticamente: reduzi-las para pré-visualizações, cortar bordas extras ou ajustá-las a proporções específicas. Na biblioteca padrão do Java (Java SE) não existe uma única classe de alto nível para essas operações, mas existe um conjunto poderoso de ferramentas nos pacotes java.awt, java.awt.image e javax.imageio. Neste artigo, vamos detalhar como realizar as operações de resize (redimensionamento) e crop (corte) usando os recursos nativos do Java.



Classes principais para trabalhar com imagens



Antes de começar a codificar, vamos conhecer as classes principais:

  • javax.imageio.ImageIO – leitura e escrita de imagens (suporta PNG, JPEG, BMP, GIF e outros).
  • java.awt.image.BufferedImage – imagem raster com acesso aos pixels.
  • java.awt.Graphics2D – classe para desenho (redimensionamento, corte, sobreposição).
  • java.awt.geom.AffineTransform – matriz de transformação para redimensionamento preciso.


1. Redimensionamento de imagem (Resize)



A maneira mais comum é redesenhar a imagem original em uma nova tela com as dimensões desejadas. Para um resultado de qualidade, use RenderingHints.



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

public class ImageResizer {

public static BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = resized.createGraphics();

// Configuração da qualidade do redimensionamento g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g2d.drawImage(original, 0, 0, targetWidth, targetHeight, null); g2d.dispose(); return resized; }

public static void main(String[] args) throws IOException { File input = new File("input.jpg"); BufferedImage source = ImageIO.read(input);

// Reduzir para 300x200 BufferedImage output = resize(source, 300, 200); ImageIO.write(output, "jpg", new File("resized.jpg")); System.out.println("Redimensionamento concluído!"); }}


Observações importantes:

  • Se não definir RenderingHints, o resultado será de baixa qualidade (pixels vizinhos).
  • Para PNG com transparência, use BufferedImage.TYPE_INT_ARGB.
  • As proporções não são preservadas automaticamente – se necessário, calcule a relação de aspecto manualmente.


2. Preservação de proporções (Aspect Ratio)



Para não distorcer a imagem, calcule o novo tamanho mantendo as proporções:



public static BufferedImage resizeKeepRatio(BufferedImage original, int maxWidth, int maxHeight) {    int origWidth = original.getWidth();    int origHeight = original.getHeight();

double widthRatio = (double) maxWidth / origWidth; double heightRatio = (double) maxHeight / origHeight; double ratio = Math.min(widthRatio, heightRatio);

int newWidth = (int) (origWidth * ratio); int newHeight = (int) (origHeight * ratio);

return resize(original, newWidth, newHeight);}


3. Corte de imagem (Crop)



O corte em Java é realizado com o método getSubi

Recommendations