Trabajo con imágenes en Java: resumen completo de bibliotecas y herramientas
Java proporciona potentes herramientas para trabajar con imágenes rasterizadas, desde la carga y guardado simples hasta el procesamiento complejo utilizando filtros y redes neuronales. En este artículo analizaremos tres enfoques principales: la biblioteca integrada Java 2D, la especializada ImageJ y el estándar industrial OpenCV. Aprenderá a elegir la herramienta adecuada y verá ejemplos de código funcionales.
1. Biblioteca integrada Java 2D (javax.imageio, java.awt)
Java 2D es parte de la biblioteca estándar de Java (JDK). No requiere instalar dependencias adicionales y es ideal para operaciones básicas: carga, cambio de tamaño, recorte, superposición de texto y filtros simples.
Clases principales:
javax.imageio.ImageIO— lectura y escritura de imágenes (PNG, JPEG, BMP, GIF, WBMP).java.awt.image.BufferedImage— representación de la imagen en memoria con acceso a píxeles.java.awt.Graphics2D— contexto de dibujo (escalado, rotación, superposición).java.awt.image.BufferedImageOp— interfaz para filtros (desenfoque, contraste, corrección de color).
Ejemplo 1: Carga, cambio de tamaño y guardado
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 { // Cargamos la imagen original BufferedImage original = ImageIO.read(new File("input.jpg"));
// Nuevas dimensiones (por ejemplo, reducimos a 300x200) int newWidth = 300; int newHeight = 200;
// Creamos una nueva imagen con las dimensiones deseadas BufferedImage resized = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = resized.createGraphics();
// Dibujamos la imagen original con escalado g2d.drawImage(original, 0, 0, newWidth, newHeight, null); g2d.dispose();
// Guardamos el resultado ImageIO.write(resized, "jpg", new File("output.jpg")); System.out.println("¡Listo! Tamaño cambiado."); }}Ejemplo 2: Aplicación de un filtro integrado (desenfoque)
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"));
// Núcleo de desenfoque 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 imágenes científicas y médicas
ImageJ es una herramienta popular para el procesamiento de imágenes, originalmente escrita en Java. Proporciona cientos de complementos listos, macros y una potente API. Es ideal para análisis de microscopía, imágenes satelitales y cualquier tarea que requiera estadísticas de píxeles.
Inclusión (Maven):
<dependency> <groupId>net.imagej</groupId> <artifactId>ij</artifactId> <version>1.53t</version></dependency>Ejemplo: Análisis de histograma y procesamiento por umbral
import ij.IJ;import ij.ImagePlus;import ij. También en la biblioteca
Generación de informes PDF en TypeScript: bibliotecas y herramientas
Internacionalización (i18n) en Swift para iOS y macOS
Planificador de tareas en Rust: creación de un job scheduler robusto
Express.js para JavaScript (Node.js): guía completa con ejemplos