我们在浏览网页的时候,经常会看到一些网络图片由模糊变的清晰的过程。在android 开发中,我们也会遇到这样的需求。那么这个是怎么实现的呢?

一,背景知识:

技术标签 关键字 Progressive JPEG。

相关知识点:jpeg 的保存格式:(参考:安卓的渐进式jpeg

JPEG文件有两种保存方式,分别是Baseline JPEG(标准型)和Progressive JPEG(渐进式)。两种格式有相同尺寸以及图像数据,扩展名也是相同的,唯一的区别是二者显示的方式不同

  • Baseline JPEG: 这种类型的JPEG文件存储方式是按从上到下的扫描方式,把每一行顺序的保存在JPEG文件中。打开这个文件显示它的内容时,数据将按照存储时的顺序从上到下一行一行的被显示出来,直到所有的数据都被读完,就完成了整张图片的显示。如果文件较大或者网络下载速度较慢,那么就会看到图片被一行行加载的效果
    • Android Progressive JPEG 图片由模糊到清晰-LMLPHP
  • Progressive JPEG: 文件包含多次扫描,这些扫描顺寻的存储在JPEG文件中。打开文件过程中,会先显示整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰。这种格式的主要优点是在网络较慢的情况下,可以看到图片的轮廓知道正在加载的图片大概是什么。在一些网站打开较大图片时,有时就能看到图片由模糊再到清晰的过程。
    • Android Progressive JPEG 图片由模糊到清晰-LMLPHP

二,如何实现

  1. facebook 开源的图片加载引擎依旧支持。地址:https://github.com/facebook/fresco
  2.  自己支持实现:参考地址:ProgressiveJpeg介绍与在Android中的使用

          原理:将图片文件中标记的每一个完整图像帧(由模糊到清晰)的图像数据,直接渲染到视图上。

    3. 针对非progressive jpeg 的图片,也有一次decode 出图片,然后自己做模糊的方案。但是这样对提升用户体验并没有什么好处。

11-14 14:04