SDWebImage 中的图片解码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDWebImage 中的图片解码相关的知识,希望对你有一定的参考价值。
参考技术A 一般我们使用的图像是JPEG/PNG,这些图像数据不是位图,而是是经过编码压缩后的数据,需要线将它解码转成位图数据,然后才能把位图渲染到屏幕上。当你用 UIImage 或 CGImageSource 的那几个方法创建图片时,图片数据并不会立刻解码。图片设置到 UIImageView 或者 CALayer.contents 中去,并且 CALayer 被提交到 GPU 前,CGImage 中的数据才会得到解码。这一步是发生在主线程的,并且不可避免。
ios默认是在主线程解码,所以SDWebImage将这个过程放到子线程了。
同时因为位图体积很大,所以磁盘缓存不会直接缓存位图数据,而是编码压缩后的PNG或JPG数据。
概括来说,从磁盘中加载一张图片,并将它显示到屏幕上,中间的 主要工作流 如下:
在上面的步骤中,我们提到了图片的解压缩是一个非常耗时的 CPU 操作,并且它默认是在主线程中执行的。那么当需要加载的图片比较多时,就会对我们应用的响应性造成严重的影响,尤其是在快速滑动的列表上,这个问题会表现得更加突出。
解压是耗时的,而系统默认是在主线程执行,所以业界通常有一种做法是,异步强制解压,也就是在异步线程主动将二进制图片数据解压成位图数据,使用CGBitmapContextCreate(...)系列方法就能实现。
该处理方式在众多图片处理框架下都有体现。
以上是关于SDWebImage 中的图片解码的主要内容,如果未能解决你的问题,请参考以下文章
Java 中,对Oracle Clob中的图片Base64进行解码后用System.out.println() 输出为啥成乱码,求高手帮忙。