在 Kotlin 中处理图像:库概述与实践示例
Kotlin 作为一种与 Java 完全兼容的现代编程语言,为开发者提供了访问整个图像处理库生态系统的能力。在本文中,我们将探讨 Kotlin 中用于加载、处理、转换和保存图像的主要工具。您将了解如何使用标准 Java 功能(AWT、Swing)以及专用库来解决典型任务。
标准 Java AWT 和 Swing 工具
Kotlin(与 Java 一样)中图像处理的基本功能由 java.awt 和 javax.imageio 包提供。主要类包括:
java.awt.image.BufferedImage— 表示可访问像素的位图图像。java.awt.Graphics2D— 提供在图像上绘制(线条、形状、文本)的方法。javax.imageio.ImageIO— 用于以各种格式(PNG、JPEG、BMP、GIF)读写图像的静态方法。java.awt.Color— 处理颜色。java.awt.image.RescaleOp、java.awt.image.ConvolveOp— 用于调整亮度、对比度、模糊的滤镜。
示例 1:加载、调整大小并保存图像
import java.awt.image.BufferedImageimport java.awt.Graphics2Dimport java.awt.RenderingHintsimport java.io.Fileimport javax.imageio.ImageIO
fun resizeImage(inputPath: String, outputPath: String, targetWidth: Int, targetHeight: Int) { // 加载原始图像 val originalImage: BufferedImage = ImageIO.read(File(inputPath))
// 创建指定大小的新图像 val resizedImage = BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB) val graphics: Graphics2D = resizedImage.createGraphics()
// 设置重采样质量 graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR) graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY) graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)
// 绘制缩放后的图像 graphics.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null) graphics.dispose()
// 保存结果 ImageIO.write(resizedImage, "jpg", File(outputPath)) println("图像已保存:$outputPath")}
// 调用示例fun main() { resizeImage("input.jpg", "output_resized.jpg", 800, 600)}Thumbnailator 库
Thumbnailator 是一个流行的 Java/Kotlin 库,极大地简化了缩略图创建和图像大小调整。其主要优势在于简单的 fluent API。
添加依赖(Gradle):
implementation("net.coobird:thumbnailator:0.4.20")示例 2:使用 Thumbnailator 创建缩略图
import net.coobird.thumbnailator.Thumbnailsimport java.io.File
fun createThumbnail(inputPath: String, outputPath: String, size: Int) { Thumbnails.of(File(inputPath)) .size(size, size) // 方形缩略图 .keepAspectRatio(true) // 保持宽高比 .outputFormat("png") .toFile(File(outputPath)) println("缩略图已创建:$outputPath")}
fun main() { createThumbnail("photo.jpg", "thumb.png", 150)}该库还支持裁剪、旋转、添加水印以及处理流。
用于 Kotlin 的 OpenCV 库
对于高级计算机图像处理(人脸识别、滤波、轮廓分析),使用