Processamento de imagens em Kotlin: resize e crop com a biblioteca Kamel

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com imagens em Kotlin: resize e crop com a biblioteca Kamel

\n\n

No desenvolvimento moderno para Android e projetos multiplataforma em Kotlin, surge frequentemente a necessidade de redimensionar (resize) e cortar (crop) imagens programaticamente. Isso é necessário para otimizar o carregamento, criar pré-visualizações, adaptar para diferentes telas ou preparar imagens para envio ao servidor. Neste artigo, vamos explorar a biblioteca Kamel — uma ferramenta poderosa para trabalhar com imagens, escrita em Kotlin puro e com suporte a multiplataforma.

\n\n

O que é Kamel?

\n\n

Kamel (Kotlin Asynchronous Media Loading) é uma biblioteca para carregamento, cache e processamento de imagens, criada especificamente para Kotlin Multiplatform. Ela fornece uma API simples para realizar operações como resize e crop, sem a necessidade de integrar frameworks pesados como Glide ou Picasso. Kamel suporta Android, iOS, JVM e JavaScript, tornando-a a escolha ideal para projetos multiplataforma.

\n\n

A instalação da biblioteca é feita via Gradle:

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

Redimensionamento de imagem (resize)

\n\n

A operação resize permite alterar as dimensões originais da imagem para uma largura e altura definidas. No Kamel, isso é implementado através da função resize(), que aceita as dimensões alvo e o modo de escala (scale mode).

\n\n

Exemplo de redimensionamento 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    // Exibição da image no Image composable\n}
\n\n

Neste exemplo, a imagem será redimensionada para 300x200 pixels mantendo a proporção (ScaleMode.Fit). Se precisar esticar a imagem sem preservar a proporção, use ScaleMode.Fill ou ScaleMode.Crop (este último corta automaticamente as bordas).

\n\n

Corte de imagem (crop)

\n\n

Crop permite recortar uma área retangular da imagem original. No Kamel, o corte pode ser feito de duas maneiras:

\n\n
    \n
  • Através do ScaleMode.Crop — corte automático durante o redimensionamento;
  • \n
  • Através da especificação manual da região — usando a classe ImageRegion.
  • \n
\n\n

Exemplo de corte 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    // Exibição da imagem cortada\n}
\n\n

Aqui, uma área da imagem é recortada começando nas coordenadas (50, 50) e com tamanho de 200x150 pixels. Isso é útil quando você precisa extrair uma parte específica, como um rosto em uma foto.

\n\n

Combinação de resize e crop

\n\n

Frequentemente é necessário realizar ambas as operações sequencialmente: primeiro cortar, depois redimensionar. O Kamel permite combiná-las através de uma cadeia de chamadas:

\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

Ordem de execução: primeiro aplica

Recommendations