Trabajo con imágenes en Kotlin: resize y crop con la biblioteca Kamel
\n\nEn 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\nKamel (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.
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\nCambio de tamaño de imagen (resize)
\n\nLa 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).
Ejemplo de cambio de tamaño básico:
\n\nimport 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\nEn 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).
Recorte de imagen (crop)
\n\nCrop 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
Ejemplo de recorte manual:
\n\nimport 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\nAquí, 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\nCombinación de resize y crop
\n\nA 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\nOrden de ejecución: primero se aplica
También en la biblioteca
Marten para C# (.NET): guía completa con ejemplos prácticos
StoreKit para Swift: guía completa con ejemplos
Creación de aplicaciones CLI en TypeScript: visión general de frameworks y herramientas
Trabajo con fechas en Kotlin: bibliotecas y herramientas para el desarrollo
Trabajo con archivos ZIP en Kotlin: creación, lectura y descompresión