Trabajo con imágenes en Kotlin: resumen de bibliotecas y ejemplos prácticos
Kotlin, siendo un lenguaje de programación moderno completamente compatible con Java, brinda a los desarrolladores acceso a todo el ecosistema de bibliotecas para trabajar con imágenes. En este artículo, revisaremos las principales herramientas disponibles en Kotlin para cargar, procesar, transformar y guardar imágenes. Aprenderá a utilizar las capacidades estándar de Java (AWT, Swing) y bibliotecas especializadas para resolver tareas típicas.
Herramientas estándar de Java AWT y Swing
La funcionalidad básica para trabajar con imágenes en Kotlin (al igual que en Java) la proporcionan los paquetes java.awt y javax.imageio. Las clases principales son:
java.awt.image.BufferedImage— representa una imagen rasterizada con acceso a los píxeles.java.awt.Graphics2D— proporciona métodos para dibujar (líneas, formas, texto) sobre la imagen.javax.imageio.ImageIO— métodos estáticos para leer y escribir imágenes en varios formatos (PNG, JPEG, BMP, GIF).java.awt.Color— trabajo con colores.java.awt.image.RescaleOp,java.awt.image.ConvolveOp— filtros para cambiar brillo, contraste, desenfoque.
Ejemplo 1: Cargar, redimensionar y guardar una imagen
import java.awt.image.BufferedImageimport java.awt.Graphics2Dimport java.awt.RenderingHintsimport java.io.Fileimport javax.imageio.ImageIO
fun resizeImage(inputPath: String, outputPath: String, targetWidth: Int, targetHeight: Int) { // Cargar la imagen original val originalImage: BufferedImage = ImageIO.read(File(inputPath))
// Crear una nueva imagen del tamaño especificado val resizedImage = BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB) val graphics: Graphics2D = resizedImage.createGraphics()
// Configurar la calidad del remuestreo graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR) graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY) graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)
// Dibujar la imagen escalada graphics.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null) graphics.dispose()
// Guardar el resultado ImageIO.write(resizedImage, "jpg", File(outputPath)) println("Imagen guardada: $outputPath")}
// Ejemplo de llamadafun main() { resizeImage("input.jpg", "output_resized.jpg", 800, 600)}Biblioteca Thumbnailator
Thumbnailator es una biblioteca popular para Java/Kotlin que simplifica enormemente la creación de miniaturas y el redimensionamiento de imágenes. Su principal ventaja es su API fluida y sencilla.
Inclusión (Gradle):
implementation("net.coobird:thumbnailator:0.4.20")Ejemplo 2: Crear una miniatura con Thumbnailator
import net.coobird.thumbnailator.Thumbnailsimport java.io.File
fun createThumbnail(inputPath: String, outputPath: String, size: Int) { Thumbnails.of(File(inputPath)) .size(size, size) // miniatura cuadrada .keepAspectRatio(true) // mantener proporciones .outputFormat("png") .toFile(File(outputPath)) println("Miniatura creada: $outputPath")}
fun main() { createThumbnail("photo.jpg", "thumb.png", 150)}La biblioteca también admite recorte, rotación, adición de marcas de agua y trabajo con flujos.
Biblioteca OpenCV para Kotlin
Para el procesamiento informático serio de imágenes (reconocimiento facial, filtrado, análisis de contornos) se utiliza