Trabalho com imagens em Kotlin: bibliotecas, ferramentas e exemplos

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 de programação moderna que roda sobre a JVM. Graças à compatibilidade total com Java, para processamento de imagens é possível usar todas as bibliotecas padrão do Java, como javax.imageio, java.awt e javax.swing. Neste artigo, abordaremos as principais abordagens para trabalhar com imagens em Kotlin: leitura, escrita, redimensionamento, aplicação de filtros e conversão de formatos.



Bibliotecas necessárias

Para trabalhar com imagens em Kotlin (JVM), não é necessário instalar dependências adicionais — a biblioteca padrão do JDK é suficiente. No entanto, para tarefas mais complexas (como processamento de imagens grandes ou trabalho com metadados), podem ser necessárias bibliotecas de terceiros:



  • java.awt.image.BufferedImage — classe principal para representar uma imagem na memória.
  • javax.imageio.ImageIO — leitura e escrita de imagens em vários formatos (PNG, JPEG, BMP, GIF).
  • java.awt.Graphics2D — desenho e transformações.
  • Thumbnailator (opcional) — simplifica o redimensionamento e a criação de miniaturas.
  • BoofCV (opcional) — biblioteca de visão computacional com suporte a Kotlin.


Leitura e escrita de imagens

A maneira mais simples de carregar uma imagem é usar ImageIO.read().



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

fun main() { // Leitura da imagem val inputFile = File("input.jpg") val image: BufferedImage = ImageIO.read(inputFile) ?: throw Exception("Não foi possível carregar a imagem")

// Escrita em outro formato val outputFile = File("output.png") ImageIO.write(image, "png", outputFile)

println("Imagem salva: ${outputFile.absolutePath}")}


Redimensionamento de imagem

Para redimensionar, usamos Graphics2D com parâmetros de suavização.



import java.awt.Graphics2Dimport java.awt.RenderingHintsimport java.awt.image.BufferedImageimport javax.imageio.ImageIOimport java.io.File

fun resizeImage(inputPath: String, outputPath: String, targetWidth: Int, targetHeight: Int) { val original: BufferedImage = ImageIO.read(File(inputPath)) val resized = BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB) val g2d: Graphics2D = resized.createGraphics()

// Ativa a suavização para um redimensionamento de qualidade g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR) g2d.drawImage(original, 0, 0, targetWidth, targetHeight, null) g2d.dispose()

ImageIO.write(resized, "jpg", File(outputPath)) println("Imagem redimensionada: $outputPath")}

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


Aplicação de filtros (desfoque, contraste)

Para efeitos simples, podemos usar BufferedImageOp (por exemplo, ConvolveOp para desfoque).



import java.awt.image.BufferedImageimport java.awt.image.ConvolveOpimport java.awt.image.Kernelimport javax.imageio.ImageIOimport java.io.File

fun applyBlur(inputPath: String, outputPath: String) { val image: BufferedImage = ImageIO.read(File(inputPath))

// Kernel de desfoque 5x5 val size = 5 val weight = 1.0f / (size * size) val kernelData = FloatArray(size * size) { weight } val kernel = Kernel(size, size, kernelData) val blurOp = ConvolveOp(kernel)

val blurred = blurOp.filter(image, null) ImageIO.write(blurred, "jpg", File(outputPath))}

fun main() { applyBlur("input.jpg", "blurred.jpg")}


Conversão de formatos

Simples p

Recommendations