Trabalho com imagens em Kotlin: bibliotecas e exemplos de código

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

Trabalho com imagens em Kotlin: visão geral das bibliotecas e exemplos práticos

Kotlin é uma linguagem multiplataforma moderna, amplamente utilizada para desenvolvimento em JVM (Desktop), Android, bem como em projetos backend e multiplataforma (KMP). O trabalho com imagens é uma das tarefas comuns, e o ecossistema Kotlin oferece várias abordagens: desde o uso de bibliotecas Java padrão até soluções especializadas para Android e Kotlin Multiplatform. Neste artigo, abordaremos as principais bibliotecas e ferramentas, mostraremos exemplos de código e daremos recomendações práticas.



1. Ferramentas integradas: AWT (Java Desktop / JVM)

Para aplicações desktop em JVM (por exemplo, JavaFX ou Swing), o mais conveniente é usar os pacotes padrão java.awt e javax.imageio. Essas bibliotecas estão disponíveis "de fábrica" e permitem carregar, redimensionar, converter formatos e desenhar em imagens.

Exemplo: carregar, redimensionar e salvar

import java.awt.image.BufferedImageimport java.io.Fileimport javax.imageio.ImageIO

fun resizeImage(inputPath: String, outputPath: String, newWidth: Int, newHeight: Int) { val original: BufferedImage = ImageIO.read(File(inputPath)) val resized = BufferedImage(newWidth, newHeight, original.type) val g = resized.createGraphics() g.drawImage(original, 0, 0, newWidth, newHeight, null) g.dispose() ImageIO.write(resized, "jpg", File(outputPath)) println("Imagem salva: $outputPath")}

fun main() { resizeImage("input.jpg", "output.jpg", 800, 600)}

Para rotação, sobreposição de marcas d'água ou corte, podem ser usados métodos Graphics2D e transformações afins.



2. Android: Bitmap e BitmapFactory

No desenvolvimento Android com Kotlin, a base para trabalhar com imagens é a classe android.graphics.Bitmap e os utilitários BitmapFactory. Eles permitem carregar imagens de recursos, arquivos ou rede, além de realizar processamento básico.

Exemplo: carregar de recursos e redimensionar (Android)

import android.graphics.Bitmapimport android.graphics.BitmapFactoryimport android.graphics.Matriximport java.io.ByteArrayOutputStream

fun scaleBitmap(bitmap: Bitmap, maxSize: Int): Bitmap { val width = bitmap.width val height = bitmap.height val scale = if (width > height) maxSize.toFloat() / width else maxSize.toFloat() / height val matrix = Matrix() matrix.postScale(scale, scale) return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true)}

fun bitmapToByteArray(bitmap: Bitmap, quality: Int = 90): ByteArray { val stream = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream) return stream.toByteArray()}

Para processamento mais avançado (filtros, efeitos), pode-se usar android.renderscript (obsoleto na API 31) ou a biblioteca OpenCV Android.



3. Kotlin Multiplatform (KMP): biblioteca KVision ou soluções próprias

Em projetos multiplataforma, não há um padrão único para trabalhar com imagens. Frequentemente são usados:

  • KVision — framework para aplicações web em Kotlin/JS, com suporte integrado para Canvas e ImageData.
  • Okio + ImageIO (JVM) / Bitmap (Android) — para KMP, frequentemente escrevem wrappers expect/actual, onde cada plataforma usa sua própria implementação.
  • Skiko — biblioteca da JetBrains para trabalhar com gráficos (Skia), disponível em JVM, JS e Native. Permite carregar, desenhar e exportar imagens.

Exemplo expect/actual para KMP:

// commonMainexpect fun loadImageBytes(path: String): ByteArray

// androidMainactual fun load

Recommendations