Trabalhando com Imagens em Java: Visão Geral Completa de Bibliotecas e Ferramentas
O Java oferece ferramentas poderosas para trabalhar com imagens raster — desde o simples carregamento e salvamento até o processamento complexo usando filtros e redes neurais. Neste artigo, abordaremos três abordagens principais: a biblioteca integrada Java 2D, a especializada ImageJ e o padrão industrial OpenCV. Você aprenderá como escolher a ferramenta adequada e verá exemplos de código funcionais.
1. Biblioteca Integrada Java 2D (javax.imageio, java.awt)
Java 2D faz parte da biblioteca padrão do Java (JDK). Ela não requer a instalação de dependências adicionais e é ideal para operações básicas: carregamento, redimensionamento, corte, sobreposição de texto e filtros simples.
Classes principais:
javax.imageio.ImageIO— leitura e escrita de imagens (PNG, JPEG, BMP, GIF, WBMP).java.awt.image.BufferedImage— representação da imagem na memória com acesso aos pixels.java.awt.Graphics2D— contexto para desenho (redimensionamento, rotação, sobreposição).java.awt.image.BufferedImageOp— interface para filtros (desfoque, contraste, correção de cor).
Exemplo 1: Carregamento, Redimensionamento e Salvamento
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 void main(String[] args) throws IOException { // Carregamos a imagem original BufferedImage original = ImageIO.read(new File("input.jpg"));
// Novas dimensões (por exemplo, reduzimos para 300x200) int newWidth = 300; int newHeight = 200;
// Criamos uma nova imagem com as dimensões desejadas BufferedImage resized = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = resized.createGraphics();
// Desenhamos a imagem original com redimensionamento g2d.drawImage(original, 0, 0, newWidth, newHeight, null); g2d.dispose();
// Salvamos o resultado ImageIO.write(resized, "jpg", new File("output.jpg")); System.out.println("Pronto! Tamanho alterado."); }}Exemplo 2: Aplicação de Filtro Integrado (Desfoque)
import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.awt.image.ConvolveOp;import java.awt.image.Kernel;import java.io.File;
public class BlurFilter { public static void main(String[] args) throws Exception { BufferedImage img = ImageIO.read(new File("input.jpg"));
// Kernel de desfoque 3x3 (box blur) float[] blurKernel = { 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f }; Kernel kernel = new Kernel(3, 3, blurKernel); ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); BufferedImage blurred = convolve.filter(img, null);
ImageIO.write(blurred, "jpg", new File("blurred.jpg")); }}2. Biblioteca ImageJ — Para Imagens Científicas e Médicas
ImageJ é uma ferramenta popular para processamento de imagens, originalmente escrita em Java. Ela oferece centenas de plugins prontos, macros e uma API poderosa. É ideal para análise de microscopia, imagens de satélite e qualquer tarefa que exija estatísticas de pixels.
Adicionando dependência (Maven):
<dependency> <groupId>net.imagej</groupId> <artifactId>ij</artifactId> <version>1.53t</version></dependency>Exemplo: Análise de Histograma e Processamento por Limiar
import ij.IJ;import ij.ImagePlus;import ij. Também na biblioteca
Trabalho com Arquivos ZIP em Java: guia completo sobre java.util.zip
Internacionalização (i18n) em Kotlin: guia completo
Trabalhando com datas em Rust: visão geral das bibliotecas de tempo e data
Serialização de objetos em TypeScript: Guia Completo