在 Kotlin 中处理图像:库、工具和示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Kotlin 中处理图像:库概览与实践示例



Kotlin 是一种运行在 JVM 之上的现代编程语言。由于与 Java 完全兼容,可以使用所有标准的 Java 库来处理图像,例如 javax.imageio、java.awt 和 javax.swing。在本文中,我们将探讨在 Kotlin 中处理图像的主要方法:读取、写入、调整大小、应用滤镜和格式转换。



必要的库

在 Kotlin (JVM) 中处理图像无需安装额外的依赖项——标准 JDK 库就足够了。然而,对于更复杂的任务(例如,处理大图像或处理元数据),可能需要第三方库:



  • java.awt.image.BufferedImage — 用于在内存中表示图像的主要类。
  • javax.imageio.ImageIO — 以各种格式(PNG、JPEG、BMP、GIF)读取和写入图像。
  • java.awt.Graphics2D — 绘图和变换。
  • Thumbnailator(可选)— 简化调整大小和创建缩略图。
  • BoofCV(可选)— 支持 Kotlin 的计算机视觉库。


读取和写入图像

加载图像最简单的方法是使用 ImageIO.read()。



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

fun main() { // 读取图像 val inputFile = File("input.jpg") val image: BufferedImage = ImageIO.read(inputFile) ?: throw Exception("无法加载图像")

// 以另一种格式写入 val outputFile = File("output.png") ImageIO.write(image, "png", outputFile)

println("图像已保存:${outputFile.absolutePath}")}


调整图像大小

要调整大小,我们使用带有抗锯齿参数的 Graphics2D。



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()

// 启用抗锯齿以获得高质量的缩放 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("图像已调整大小:$outputPath")}

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


应用滤镜(模糊、对比度)

对于简单的效果,可以使用 BufferedImageOp(例如,用于模糊的 ConvolveOp)。



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))

// 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")}


格式转换

简单的

推荐