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
Também na biblioteca
Nodemon para JavaScript (Node.js): guia completo com exemplos
GraphQL em PHP: bibliotecas webonyx/graphql-php e Lighthouse para criação de APIs
PhotosUI para Swift: guia completo com exemplos práticos
OkHttp para Kotlin: guia completo com exemplos