尝试在 Kotlin 片段中使用 Zelory 压缩器

Trying to use Zelory compressor in fragment with Kotlin

我正在尝试对上传到 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 输入 activity 认为是问题所在,但这并没有消除错误。有帮助吗?

我通过不使用 Zelory 工具解决了这个问题。很复杂,找到了一个更多的"standard"库来实现同样的。

实现压缩的方法是拍摄图像,转换为位图并按照此link中的说明进行操作我发现:

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 分配给它。

其余按照link。

祝其他尝试此操作的人好运。给你一种压缩感。沿着这条路,我能够使用 WEBP 将一张 8MB 的照片压缩到 350kb。效率很高!

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