Trabajo con imágenes en Java: desde la lectura hasta el procesamiento

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en Java: bibliotecas y ejemplos prácticos



Java proporciona potentes herramientas integradas para trabajar con imágenes rasterizadas. En este artículo, exploraremos la biblioteca estándar javax.imageio, el paquete java.awt.image y la popular biblioteca de terceros Thumbnailator. Aprenderá a leer, guardar, escalar, aplicar filtros y convertir formatos de imágenes.



1. Fundamentos: paquete javax.imageio y BufferedImage



La clase clave para representar una imagen en memoria es BufferedImage. Permite obtener y modificar píxeles, trabajar con diferentes modelos de color (RGB, ARGB) y tipos de datos.



Lectura de una imagen desde un archivo



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

public class ImageReadExample { public static void main(String[] args) { try { File inputFile = new File("input.jpg"); BufferedImage image = ImageIO.read(inputFile); System.out.println("Ancho: " + image.getWidth()); System.out.println("Alto: " + image.getHeight()); System.out.println("Tipo: " + image.getType()); } catch (IOException e) { e.printStackTrace(); } }}


Escritura de una imagen en un archivo



File outputFile = new File("output.png");ImageIO.write(image, "png", outputFile); // El formato se determina por la extensión


Formatos compatibles: JPEG, PNG, BMP, WBMP, GIF (solo lectura). Puede obtener la lista completa mediante ImageIO.getReaderFormatNames().



2. Escalado y transformaciones con Java 2D



El paquete java.awt.Graphics2D permite realizar escalado de alta calidad, rotación, reflexión y superposición de imágenes.



Escalado manteniendo la proporción



import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;

public class ImageResizer { public static BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, original.getType()); Graphics2D g2d = resized.createGraphics(); // Habilitar suavizado para mejor calidad 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; }}


Rotación de imagen en 90 grados



public static BufferedImage rotate(BufferedImage image, double angleDegrees) {    double radians = Math.toRadians(angleDegrees);    int w = image.getWidth();    int h = image.getHeight();        // Nuevo tamaño después de la rotación    int newW = (int) Math.abs(w * Math.cos(radians)) + (int) Math.abs(h * Math.sin(radians));    int newH = (int) Math.abs(h * Math.cos(radians)) + (int) Math.abs(w * Math.sin(radians));        BufferedImage rotated = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);    Graphics2D g2d = rotated.createGraphics();    g2d.translate((newW - w) / 2.0, (newH - h) / 2.0);    g2d.rotate(radians, w / 2.0, h / 2.0);    g2d.drawImage(image, 0, 0, null);    g2d.dispose();    return rotated;}


3. Aplicación de filtros: desenfoque, contraste, brillo



Para el filtrado, use BufferedImageOp (del paquete java.awt.image). Las implementaciones más útiles son:



Recommendations