Processamento de Imagens em Kotlin: redimensionar e cortar com a biblioteca ImageMagick

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: 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 é mantida
  • resize(largura, altura, "^") — preenchimento mínimo da área
  • resize(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:



                
    
    

Recommendations