【问题标题】:Image cropper in Jetpack Compose?在 Jetpack Compose 中裁剪图像?
【发布时间】:2021-12-30 04:35:09
【问题描述】:

我到处搜索,但没有一个关于在 Jetpack Compose 中裁剪图像的文档
如何在 Jetpack Compose 中裁剪图像?

【问题讨论】:

  • 你需要自己构建一个Cropper,或者你可以集成一些库来为你做这件事。我很确定您可以将它与 Compose 集成。你试过什么吗?
  • 不,但是那里有很多库,但 XML 不是 Jetpack Compose
  • 发布一个例子
  • 我也在寻找如何在 compose 中裁剪图像?

标签: android android-jetpack-compose


【解决方案1】:

您实际上可以使用那些较旧的 Android 库没问题。

我用过这个:https://github.com/CanHub/Android-Image-Cropper

项目 build.gradle:

allprojects {
    repositories {
        google()
        mavenCentral()
        maven(url = "https://jitpack.io")
    }
}

应用构建.gradle:

implementation("com.github.CanHub:Android-Image-Cropper:4.0.0")

用法(CropImageContract由上面提供):

@Composable
fun ImageSelectorAndCropper() {
    var imageUri by remember {
        mutableStateOf<Uri?>(null)
    }
    val context = LocalContext.current
    val bitmap =  remember {
        mutableStateOf<Bitmap?>(null)
    }

    val imageCropLauncher = rememberLauncherForActivityResult(CropImageContract()) { result ->
        if (result.isSuccessful) {
            // use the cropped image
            imageUri = result.uriContent
        } else {
            // an error occurred cropping
            val exception = result.error
        }
    }

    val imagePickerLauncher = rememberLauncherForActivityResult(contract = ActivityResultContracts.GetContent()) { uri: Uri? ->
        val cropOptions = CropImageContractOptions(uri, CropImageOptions())
        imageCropLauncher.launch(cropOptions)
    }

    if (imageUri != null) {
        if (Build.VERSION.SDK_INT < 28) {
            bitmap.value = MediaStore.Images.Media.getBitmap(context.contentResolver, imageUri)
        } else {
            val source = ImageDecoder.createSource(context.contentResolver, imageUri!!)
            bitmap.value = ImageDecoder.decodeBitmap(source)
        }
        Button(onClick = { imagePickerLauncher.launch("image/*") }) {
            Text("Pick image to crop")
        }
    }
}

编辑:

我还必须将此添加到清单中,以便 CropActivity 选择一个主题

<activity android:name="com.canhub.cropper.CropImageActivity"
    android:theme="@style/Base.Theme.AppCompat"/>

【讨论】:

  • 我必须使用 androidx.appcompat:appcompat 才能让它与 compose 一起使用。您能否举一个将其与相机一起使用的示例。就像启动相机并使用其图片进行裁剪一样。谢谢
猜你喜欢
  • 2015-02-02
  • 2017-05-22
  • 1970-01-01
  • 2022-09-29
  • 2011-09-12
  • 2014-11-30
  • 2011-01-01
  • 2011-01-01
  • 2016-12-05
相关资源
最近更新 更多