Trabalhando com Imagens em Kotlin: redimensionamento e corte (resize & crop)
No desenvolvimento web moderno e na criação de aplicativos móveis em Kotlin, surge frequentemente a necessidade de processar imagens programaticamente: reduzir o tamanho para otimizar o carregamento, cortar bordas extras ou preparar pré-visualizações. Neste artigo, exploraremos uma ferramenta poderosa para trabalhar com gráficos — a biblioteca ImageMagick (através do wrapper Java JMagick), que é ideal para tarefas de redimensionamento e corte em Kotlin.
O que são ImageMagick e JMagick?
ImageMagick é um software de código aberto multiplataforma para criar, editar e converter imagens raster. Ele suporta mais de 200 formatos (JPEG, PNG, GIF, WebP, TIFF e outros). Para trabalhar com ImageMagick a partir de Java/Kotlin, utiliza-se a biblioteca JMagick, que fornece uma Interface Nativa Java (JNI) para as funções do ImageMagick.
Vantagens de usar ImageMagick em Kotlin:
- Alta performance (código nativo C/C++)
- Funcionalidades ricas: redimensionar, cortar, girar, filtros, conversão de formatos
- Suporte para processamento em lote de imagens grandes
- Controle preciso da qualidade na compressão
Instalação e configuração
Para trabalhar com JMagick, é necessário instalar o ImageMagick nativo no seu sistema. Em seguida, adicione a dependência no build.gradle.kts (para Gradle):
dependencies { implementation("org.im4java:im4java:1.4.0") // Wrapper alternativo // Ou use JMagick: implementation("org.jmagick:jmagick:6.6.9")}Nota: JMagick requer a instalação do ImageMagick versão 6.x (não 7). Para simplificar, nos exemplos usaremos im4java — um wrapper mais moderno que não requer JNI.
Redimensionamento de imagem (Resize)
A operação resize altera as dimensões da imagem mantendo a proporção (ou não). No im4java, isso é feito através da classe ConvertCmd.
Exemplo: reduzir a imagem para uma largura de 300 pixels, mantendo a proporção:
import org.im4java.core.ConvertCmdimport org.im4java.core.IMOperation
fun redimensionarImagem(caminhoEntrada: String, caminhoSaida: String, larguraAlvo: Int) { val cmd = ConvertCmd() val op = IMOperation()
op.addImage(caminhoEntrada) op.resize(larguraAlvo, null) // null = altura automática proporcional op.addImage(caminhoSaida)
cmd.run(op)}
fun main() { redimensionarImagem("entrada.jpg", "saida_redimensionada.jpg", 300) println("Imagem reduzida para largura de 300px")}Parâmetros do resize:
resize(largura, altura)— se um parâmetro for null, a proporção é mantidaresize(largura, altura, "^")— preenchimento mínimo da árearesize(largura, altura, "!")— redimensionamento forçado sem manter a proporção
Corte de imagem (Crop)
Crop recorta uma área retangular da imagem. São especificadas as coordenadas do canto superior esquerdo e as dimensões da área.
Exemplo: recortar um quadrado central de tamanho 200x200 pixels:
import org.im4java.core.ConvertCmdimport org.im4java.core.IMOperation
fun cortarImagem(caminhoEntrada: String, caminhoSaida: String, x: Int, y: Int, largura: Int, altura: Int) { val cmd = ConvertCmd() val op = IMOperation()
op.addImage(caminhoEntrada) op.crop(largura, altura, x, y) op.addImage(caminhoSaida)
cmd.run(op)}
fun main() { // Recortar área: canto superior esquerdo (100,50), tamanho 400x300 cortarImagem("entrada.jpg", "saida_cortada.jpg", 100, 50, 400, 300) println("Imagem cortada")}Para centralização automática, as coordenadas podem ser calculadas:
Também na biblioteca
ts-jest para TypeScript: guia completo com exemplos
Cache em Kotlin: Redis, Caffeine e Ehcache — guia completo
Cliente OAuth para JavaScript (Node.js): visão geral e exemplos de uso
Trabalho com datas em Kotlin: visão geral de bibliotecas e ferramentas
gRPC para Kotlin: bibliotecas e exemplos de uso
Recommendations