Closed XDao7 closed 4 months ago
实在抱歉,最近一直在忙别的项目
SubsamplingState@9df97bfd. resetTileDecoder:contentSizeChanged. error, The thumbnail aspect ratio is different with the original image. contentSize: 22x456, ignoreExifOrientation=false. imageInfo: (1586x31416,'image/jpeg'). 'http://10.52.12.232:30001/minio-server/zhihuiketang001dev/var/2024/0314/6b8b76ef-b741-47ea-983a-a86fe21c2b50.jpg'
这一条日志已经给出答案了,原因是原图和缩略图的宽高比的差值超过了 0.5,这是为了确保子采样图盖在缩略图上不会出现明显的错位而做的限制
你可以看一下为什么加载的缩略图相比原图会相差这么大,或者换用别的图片加载库,如果实在无法解决并给出合理性解释,我再考虑适当放开此限制
我用同一张图片测试了一下CoilZoomAsyncImage,GlideZoomAsyncImage和SketchZoomAsyncImage,发现只有SketchZoomAsyncImage可以正常进行子采样。
因为 SketchZoomAsyncImage 默认只会等比例的修改图片的尺寸
╮(╯-╰)╭已经切换成了SketchZoomAsyncImage,不过有考虑过CoilZoomAsyncImage或者GlideZoomAsyncImage做适配么?不是很清楚他们加载缩略图的规则是啥。
是它们默认解码的图片不符合 zoomimage 的要求,你要调整它们的参数让它们不要修改
我在coil当中没有找到哪个设置可以让这张图片的分辨率满足子采样要求
precision(INEXACT)
EXACT,INEXACT和AUTOMATIC都不行,我还试过了Scale.FILL,这个似乎是按最短的边设置大小,图片大了还是会OOM。
1.0.0-alpha02 版本会放宽此限制
我尝试引入了io.github.panpf.zoomimage:zoomimage-compose-coil2:1.1.0-alpha02,将上述代码中的rememberZoomState()修改为rememberCoilZoomState(),然后有个报错:
sys default last handle start!
FATAL EXCEPTION: main
Process: com.txedu.zhkt, PID: 20720
java.lang.IllegalStateException: closed
at okio.RealBufferedSource.read(RealBufferedSource.kt:189)
at okio.RealBufferedSource$inputStream$1.read(RealBufferedSource.kt:162)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:248)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:288)
at java.io.BufferedInputStream.read(BufferedInputStream.java:347)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at androidx.exifinterface.media.ExifInterface.getMimeType(ExifInterface.java:5341)
at androidx.exifinterface.media.ExifInterface.loadAttributes(ExifInterface.java:4587)
at androidx.exifinterface.media.ExifInterface.<init>(ExifInterface.java:4058)
at androidx.exifinterface.media.ExifInterface.<init>(ExifInterface.java:4013)
at com.github.panpf.zoomimage.subsampling.internal.Decodes_androidKt.decodeExifOrientation(decodes.android.kt:43)
at com.github.panpf.zoomimage.subsampling.internal.BitmapRegionDecoderDecodeHelper$Factory.create(BitmapRegionDecoderDecodeHelper.kt:91)
at com.github.panpf.zoomimage.subsampling.internal.Decodes_androidKt.createDecodeHelper(decodes.android.kt:31)
at com.github.panpf.zoomimage.subsampling.internal.SubsamplingsKt.decodeAndCreateTileDecoder-ZYX0fMU(subsamplings.kt:43)
at com.github.panpf.zoomimage.compose.subsampling.SubsamplingState$resetTileDecoder$2$result$1.invokeSuspend(SubsamplingState.kt:402)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:111)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:99)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:811)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:715)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:702)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@1cf81d2, Dispatchers.Main]
新版本在用法上有什么别的改动么?
我还尝试引入了io.github.panpf.zoomimage:zoomimage-compose-coil:1.1.0-alpha02,虽然没有报错,但是没有加载出图片来,包括缩略图都没有,还不清楚是什么原因。
这是 alpha02 为了修复别的问题导致的 bug,正在修复,争取今天发 alpha03
1.1.0-alpha03 版本修复此问题,已发布
Describe the bug
在使用子采样加载大图的时候,出现了缩略图加载成功,但是子采样失败的问题,log如下:
想问一下这种情况是图片参数有问题还是什么?可以提供一些帮助么?出问题的原图附在最后了。
Affected platforms
Affected components
Versions
Running Devices
Sample code
Screenshots
Additional context