美文网首页Java 编程
Glide 番外篇之判断图片的类型

Glide 番外篇之判断图片的类型

作者: Android轮子哥 | 来源:发表于2020-05-30 23:01 被阅读0次
  • 本文章所使用的 Glide 源码版本:4.11.0

上一篇:Glide 三部曲之 Gif 加载原理

开胃菜

源码解析

  • 还是从 GifDrawable 类入手,让我们看看是在什么地方创建了 GifDrawable
  • 在这里我们发现了一个叫 ImageHeaderParser 集合,从字面上理解是一个图片头解析器集合
  • 方法名叫 getType,返回类型是 ImageType,这里就是获取图片类型的核心代码
  • 在这里我们可以看到判断不同图片类型的规则,我们先讲讲 JPG 的判断方式
  • 我们都知道整数是基本数据类型,而任何数据在计算机都是以二进制的形式存在,而在计算机最小的存储单位是位,每一位不是 0 就是 1,一个字节能存储 8 位以内的二进制数据,这里的符号指的就是减号,有符号的整数第一位标记的就是正或者负,而无符号的整数则没有这种标记位。
  • 通过计算,0xFFD8 得出的值是 65496,通过进制转换,我们又找回了一点基础知识,原来我们平时用的整数就是以十进制来显示的
  • 这三句代码其实很简单,就是通过读取标记位来判断图片的类型

  • 接下来让我们看看 Gif 类型是怎么判断的

  • 这里的位计算是不是又把大多数人给难住了,其实我们没有必要扣这个细节,看不懂没关系,我们可以直接通过字段的命名来判断
  • 在这里我们可以得出一个结论,JPG 的标记位大小只有两个字节,而 GIF 的标记位大小有三个字节,那么问题来了,为什么 GIF 的标记位要三个字节?
  • 对比刚刚讲过的 JPG 的标记位
  • GIF 的标记位显然要比 JPG 要大,所以 JPG 只需要两个字节就能存储,而 GIF 需要三个字节才能存放得下
  • 这里又补充了一点计算机基础知识,这样是不是好理解多了?

  • 接下来让我们简单看看 Glide 支持图片的类型有哪些?

  • 讲到这里就已经结束,接下来让我们总结一下这块的源码

总结

  • Glide 判断图片类型其实很简单,读取文件流最前面的几个字节码,这几个字节码代表的是图片类型的标记位,再通过这个标记位来判断图片的格式。

Android技术讨论Q群:78797078

相关文章

网友评论

    本文标题:Glide 番外篇之判断图片的类型

    本文链接:https://www.haomeiwen.com/subject/frkkzhtx.html