首页 > 解决方案 > 尝试在 Kotlin 的片段中使用 Zelory 压缩器

问题描述

我正在尝试为我的文件上传到 Firebase 存储实现图像压缩。正常的图像选择和上传效果很好,但我现在想实现图像压缩。我遇到了 Zelory 压缩器,我正在尝试实现,但我似乎无法正确使用代码。

我在片段中使用它,当我尝试将位图加载到压缩器行时,它似乎在上下文中给出错误:

代码错误

在此之前我的代码是使用 ImageUri 并将其转换为压缩器需要的文件路径。

val image_file_path = File(mImageUri.path)
val ctx = activity!!.applicationContext

val tempBitmap = Compressor.compress(ctx, image_file_path)

mImageUri 是我在正常选择和上传到 Firebase 时使用的。

我查看了许多尝试使用此代码的人的示例,但我看不出我做错了什么。这与我在片段中使用它的事实有关吗?如果是这样,我不介意将布局更改为仅以正常布局而不是片段上传。

我最初只是将ctx输入视为活动,认为这是问题所在,但这并没有消除错误。有什么帮助吗?

标签: kotlinimage-compression

解决方案


我通过不使用 Zelory 工具解决了这个问题。它很复杂,并找到了一个更“标准”的库来实现相同的目标。

实现压缩的方法是获取您的图像,转换为位图并按照我找到的此链接中的说明进行操作:

https://android--code.blogspot.com/2018/04/android-kotlin-compress-bitmap-example.html

老实说,这是不言自明的,我对代码的唯一区别是它们使用静态可绘制对象,而我必须将我的 URI 转换为位图。我通过使用以下行来做到这一点:

val bitmap = MediaStore.Images.Media.getBitmap(activity?.contentResolver,mImageUri)

在上面,我使用activity?是因为我在片段中执行此操作。此外,mImageUri它是一个伴随对象,我在从电话库中选择后将 URI 分配给该对象。

其余的按照链接。

祝其他尝试这个的人好运。给你一种压缩的感觉。走这条路,我能够使用 WEBP 将一张 8MB 的照片压缩到 350kb。非常有效率!

PS:在使用 WEBP 时,我设法按照上述压缩应用了 1% 的质量,而质量没有太大损失。即使在 PC 上下载压缩图像,您也不会说它是压缩的。


推荐阅读