Procesamiento de imágenes en Kotlin: resize y crop con la biblioteca Kamel

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: resize y crop con la biblioteca Kamel

\n\n

En el desarrollo moderno para Android y proyectos multiplataforma en Kotlin, a menudo surge la necesidad de cambiar el tamaño (resize) y recortar (crop) imágenes mediante programación. Esto es necesario para optimizar la carga, crear vistas previas, adaptarse a diferentes pantallas o preparar imágenes para enviarlas al servidor. En este artículo, analizaremos la biblioteca Kamel, una potente herramienta para trabajar con imágenes, escrita en Kotlin puro y compatible con múltiples plataformas.

\n\n

¿Qué es Kamel?

\n\n

Kamel (Kotlin Asynchronous Media Loading) es una biblioteca para cargar, almacenar en caché y procesar imágenes, creada específicamente para Kotlin Multiplatform. Proporciona una API simple para realizar operaciones como resize y crop, sin necesidad de conectar frameworks pesados como Glide o Picasso. Kamel es compatible con Android, iOS, JVM y JavaScript, lo que la convierte en una opción ideal para proyectos multiplataforma.

\n\n

La instalación de la biblioteca se realiza a través de Gradle:

\n\n
// build.gradle.kts (commonMain)\nimplementation("media.kamel:kamel-image:1.0.0")
\n\n

Cambio de tamaño de imagen (resize)

\n\n

La operación resize permite cambiar las dimensiones originales de una imagen a un ancho y alto determinados. En Kamel, esto se implementa a través de la función resize(), que acepta las dimensiones objetivo y el modo de escalado (scale mode).

\n\n

Ejemplo de cambio de tamaño básico:

\n\n
import androidx.compose.runtime.*\nimport media.kamel.image.loadImage\nimport media.kamel.image.resizer.*\n\n@Composable\nfun ResizedImage() {\n    val image = loadImage(\n        data = "https://example.com/photo.jpg",\n        resizer = Resizer(\n            width = 300,\n            height = 200,\n            scaleMode = ScaleMode.Fit\n        )\n    )\n    // Visualización de la imagen en Image composable\n}
\n\n

En este ejemplo, la imagen se escalará a 300x200 píxeles manteniendo la proporción (ScaleMode.Fit). Si necesita estirar la imagen sin mantener la proporción, use ScaleMode.Fill o ScaleMode.Crop (este último recorta automáticamente los bordes).

\n\n

Recorte de imagen (crop)

\n\n

Crop permite recortar un área rectangular de la imagen original. En Kamel, el recorte se puede realizar de dos maneras:

\n\n
    \n
  • A través de ScaleMode.Crop — recorte automático al escalar;
  • \n
  • A través de la especificación manual de la región — usando la clase ImageRegion.
  • \n
\n\n

Ejemplo de recorte manual:

\n\n
import media.kamel.image.loadImage\nimport media.kamel.image.cropper.*\n\n@Composable\nfun CroppedImage() {\n    val image = loadImage(\n        data = "https://example.com/photo.jpg",\n        cropper = Cropper(\n            region = ImageRegion(\n                left = 50,\n                top = 50,\n                width = 200,\n                height = 150\n            )\n        )\n    )\n    // Visualización de la imagen recortada\n}
\n\n

Aquí, se recorta de la imagen un área que comienza en las coordenadas (50, 50) y tiene un tamaño de 200x150 píxeles. Esto es útil cuando necesita extraer una parte específica, como un rostro en una fotografía.

\n\n

Combinación de resize y crop

\n\n

A menudo es necesario realizar ambas operaciones en secuencia: primero recortar, luego cambiar el tamaño. Kamel permite combinarlas a través de una cadena de llamadas:

\n\n
@Composable\nfun CombinedProcessing() {\n    val image = loadImage(\n        data = "https://example.com/photo.jpg",\n        resizer = Resizer(width = 400, height = 300, scaleMode = ScaleMode.Fit),\n        cropper = Cropper(region = ImageRegion(100, 100, 600, 450))\n    )\n}
\n\n

Orden de ejecución: primero se aplica

Recommendations