kotlin - 尝试在 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
输入视为活动,认为这是问题所在,但这并没有消除错误。有什么帮助吗?
解决方案
我通过不使用 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 上下载压缩图像,您也不会说它是压缩的。
推荐阅读
- java - 结构化流卡夫卡火花 java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging
- python - pandas 语法中的 pandas 流控制
- angular - 元素在某个点不可点击
- apache-kafka - ISR 不断缩小和扩大
- r - 遍历过滤器表达式列表:在 mutate 中调用 map2 中的 NSE 问题
- c# - 从excel加载数据
- java - firebase.database.DatabaseException:在类上找不到要序列化的属性
- python - 计算以列表形式存储的项目的价格
- javascript - 音频文件的多个进度条
- javascript - 使用分页在表格中丢失 jQuery 样式