Kotlin 中的图像处理:使用 Kamel 库进行 resize 和 crop

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

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

开始课程

Kotlin 中的图像处理:使用 Kamel 库进行 resize 和 crop



在现代 Android 和 Kotlin 多平台项目开发中,经常需要以编程方式调整图像大小 (resize) 和裁剪图像 (crop)。这对于优化加载、创建缩略图、适配不同屏幕或准备上传到服务器的图像至关重要。在本文中,我们将介绍 Kamel 库——一个用纯 Kotlin 编写、支持多平台的强大图像处理工具。



什么是 Kamel?



Kamel (Kotlin Asynchronous Media Loading) 是一个专为 Kotlin Multiplatform 设计的图像加载、缓存和处理库。它提供了简单的 API 来执行诸如 resize 和 crop 之类的操作,而无需引入像 Glide 或 Picasso 这样重量级的框架。Kamel 支持 Android、iOS、JVM 和 JavaScript,使其成为跨平台项目的理想选择。



通过 Gradle 安装该库:



// build.gradle.kts (commonMain)implementation("media.kamel:kamel-image:1.0.0")


调整图像大小 (resize)



resize 操作允许将图像的原始尺寸更改为指定的宽度和高度。在 Kamel 中,这是通过 resize() 函数实现的,该函数接受目标尺寸和缩放模式 (scale mode)。



基本调整大小的示例:



import androidx.compose.runtime.*import media.kamel.image.loadImageimport media.kamel.image.resizer.*

@Composablefun ResizedImage() { val image = loadImage( data = "https://example.com/photo.jpg", resizer = Resizer( width = 300, height = 200, scaleMode = ScaleMode.Fit ) ) // 在 Image composable 中显示 image}


在此示例中,图像将缩放至 300x200 像素,并保持宽高比 (ScaleMode.Fit)。如果需要拉伸图像而不保持宽高比,请使用 ScaleMode.Fill 或 ScaleMode.Crop(后者会自动裁剪边缘)。



裁剪图像 (crop)



Crop 允许从原始图像中裁剪出一个矩形区域。在 Kamel 中,可以通过两种方式执行裁剪:



  • 通过 ScaleMode.Crop — 缩放时自动裁剪;
  • 通过手动指定区域 — 使用 ImageRegion 类。


手动裁剪的示例:



import media.kamel.image.loadImageimport media.kamel.image.cropper.*

@Composablefun CroppedImage() { val image = loadImage( data = "https://example.com/photo.jpg", cropper = Cropper( region = ImageRegion( left = 50, top = 50, width = 200, height = 150 ) ) ) // 显示裁剪后的图像}


这里从图像中裁剪出一个区域,该区域从坐标 (50, 50) 开始,尺寸为 200x150 像素。当需要提取特定部分(例如照片中的人脸)时,这非常有用。



组合使用 resize 和 crop



通常需要按顺序执行这两个操作:先裁剪,再调整大小。Kamel 允许通过链式调用来组合它们:



@Composablefun CombinedProcessing() {    val image = loadImage(        data = "https://example.com/photo.jpg",        resizer = Resizer(width = 400, height = 300, scaleMode = ScaleMode.Fit),        cropper = Cropper(region = ImageRegion(100, 100, 600, 450))    )}


执行顺序:首先应用

推荐