Trabajo con imágenes en Kotlin: bibliotecas y ejemplos de código

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 Kotlin: resumen de bibliotecas y ejemplos prácticos

Kotlin es un lenguaje moderno multiplataforma que se utiliza activamente para el desarrollo en JVM (Desktop), Android, así como en proyectos backend y multiplataforma (KMP). El trabajo con imágenes es una de las tareas comunes, y en el ecosistema de Kotlin existen varios enfoques: desde el uso de bibliotecas estándar de Java hasta soluciones especializadas para Android y Kotlin Multiplatform. En este artículo analizaremos las principales bibliotecas y herramientas, mostraremos ejemplos de código y daremos recomendaciones prácticas.



1. Herramientas integradas: AWT (Java Desktop / JVM)

Para aplicaciones de escritorio en JVM (por ejemplo, en JavaFX o Swing), lo más conveniente es usar el paquete estándar java.awt y javax.imageio. Estas bibliotecas están disponibles "de serie" y permiten cargar, cambiar el tamaño, convertir formatos y dibujar en imágenes.

Ejemplo: carga, cambio de tamaño y guardado

import java.awt.image.BufferedImageimport java.io.Fileimport javax.imageio.ImageIO

fun resizeImage(inputPath: String, outputPath: String, newWidth: Int, newHeight: Int) { val original: BufferedImage = ImageIO.read(File(inputPath)) val resized = BufferedImage(newWidth, newHeight, original.type) val g = resized.createGraphics() g.drawImage(original, 0, 0, newWidth, newHeight, null) g.dispose() ImageIO.write(resized, "jpg", File(outputPath)) println("Imagen guardada: $outputPath")}

fun main() { resizeImage("input.jpg", "output.jpg", 800, 600)}

Para rotar, superponer marcas de agua o recortar, se pueden usar los métodos de Graphics2D y las transformaciones afines.



2. Android: Bitmap y BitmapFactory

En el desarrollo de Android con Kotlin, la base para trabajar con imágenes es la clase android.graphics.Bitmap y las utilidades BitmapFactory. Permiten cargar imágenes desde recursos, archivos o la red, así como realizar procesamiento básico.

Ejemplo: carga desde recursos y cambio de tamaño (Android)

import android.graphics.Bitmapimport android.graphics.BitmapFactoryimport android.graphics.Matriximport java.io.ByteArrayOutputStream

fun scaleBitmap(bitmap: Bitmap, maxSize: Int): Bitmap { val width = bitmap.width val height = bitmap.height val scale = if (width > height) maxSize.toFloat() / width else maxSize.toFloat() / height val matrix = Matrix() matrix.postScale(scale, scale) return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true)}

fun bitmapToByteArray(bitmap: Bitmap, quality: Int = 90): ByteArray { val stream = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream) return stream.toByteArray()}

Para procesamiento más complejo (filtros, efectos), se puede usar android.renderscript (obsoleto en API 31) o la biblioteca OpenCV Android.



3. Kotlin Multiplatform (KMP): biblioteca KVision o soluciones propias

En proyectos multiplataforma no hay un estándar único para trabajar con imágenes. A menudo se utilizan:

  • KVision — framework para aplicaciones web en Kotlin/JS, con soporte integrado para trabajar con Canvas e ImageData.
  • Okio + ImageIO (JVM) / Bitmap (Android) — para KMP a menudo se escriben envoltorios expect/actual, donde en cada plataforma se usa su propia implementación.
  • Skiko — biblioteca de JetBrains para trabajar con gráficos (Skia), disponible en JVM, JS y Native. Permite cargar, dibujar y exportar imágenes.

Ejemplo de expect/actual para KMP:

// commonMainexpect fun loadImageBytes(path: String): ByteArray

// androidMainactual fun load

Recommendations