你好,压缩的话,怎么直接传list集合,
RookieExaminer opened this issue · 10 comments
你好,压缩的话,怎么直接传list集合,
.load(list)
而不是
.load(uri, uri)
如下
val arrays = ArrayList<File>()
Luban.with(this) //Lifecycle 获取,可以不填写参数也可使用ProcessLifecycleOwner
.load(arrays) //_**支持 File,Uri,InputStream,String,和以上数据数组和集合**_
.setOutPutDir(path) //输出目录文件夹
.concurrent(true) //多文件压缩是否并行,内部优化并行数量防止OOM
.useDownSample(true) //压缩算法 true采用邻近采样,否则使用双线性采样(纯文字图片效果绝佳)
.format(Bitmap.CompressFormat.PNG) //压缩后输出文件格式 支持 JPG,PNG,WEBP
.ignoreBy(200) //期望大小,大小和图片呈现质量不能均衡所以压缩后不一定小于此值,
.quality(95) //质量压缩系数 0-100
.rename { "pic$it" } //文件重命名
.filter { true } // 过滤器
.compressObserver {
onSuccess = { }
onStart = {}
onCompletion = {}
onError = { e, s -> }
}.launch()
val arrays = ArrayList<File>()
数组是 string类型的文件路径 是否可以?
因为我使用的时候传入string类型的文件路径 list,报错,
File,Uri,InputStream,String,和以上数据 单个、数组、集合 都支持的 具体报错显示什么错误
2021-04-01 15:01:28.625 9306-9306/com.pinet.cloth.android E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pinet.cloth.android, PID: 9306
java.io.IOException: Incoming data type exception, it must be String, File, Uri
at d.l.a.c$b.e(Luban.kt:107)
at d.l.a.f.a.a(InputStreamAdapter.kt:26)
at com.forjrking.lubankt.Builder$compress$2.invokeSuspend(Luban.kt:253)
at com.forjrking.lubankt.Builder$compress$2.invoke(Unknown Source:10)
at g.a.h3.b.e(Undispatched.kt:91)
at g.a.h.e(Builders.common.kt:160)
at g.a.f.g(Unknown Source:1)
at com.forjrking.lubankt.Builder.f(Luban.kt:247)
at com.forjrking.lubankt.MultiRequestBuild$asyncRun$1$invokeSuspend$$inlined$map$1$2$lambda$1.invokeSuspend(Luban.kt:346)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at g.a.t0.run(DispatchedTask.kt:56)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
at d.l.a.b$b.run(Luban.kt:390)
我传入的是string 类型的图片路径 list ,路径上传到阿里云是可以的
暂时是模拟器测试的。
/storage/emulated/0/DCIM/com.pinet.cloth.android/1617246751183_100.JPG
val compileSdkVersion = 30
val buildToolsVersion = "30.0.2"
val minSdkVersion = 23
val targetSdkVersion = 30
原因找到了,我的问题。先按下面这样写
val arrays = ArrayList<String>()
Luban.with(this)
.load(*arrays.toArray())
可以用了,感谢