一 gif原理

简单来说,gif就是通过一张张静态图片连续播放产生的。

实验图片为gif原理+gifsicle压缩gif

 

gif信息包含: 1.文件头、2.图像帧信息、3.注释。

1 文件头(格式声明、逻辑屏幕描述符、全局调色盘)

1 .1格式声明

一般先声明是gif文件,然后再加上版本号。

通过命令行vim查看gif文件,可以看到文件开头为GIF,89a表示格式,格式有87a或者89a。gif原理+gifsicle压缩gif

在命令行中输入hexdump xx.gif可以看到gif的16进制文件,对照ASCII码,474946代表GIF,383961代表89a。

gif原理+gifsicle压缩gif

1.2 逻辑屏幕描述符

紧跟在文件头后,固定有7个字节,表明图片需要占用的空间,包括图片宽Width(2字节)、高Depth(2B),调色盘信息Packet(1B),背景色索引(1B),像素高宽比(1B)

gif原理+gifsicle压缩gif

gif原理+gifsicle压缩gif

通过gifsicle -I xx.gif查看图片信息(需提前下载安装gifsicle)

(1)宽、高

十六进制的f8表示十进制的248,73表示十进制的115

gif原理+gifsicle压缩gif

 

(2)调色盘信息

十六进制f5表示二进制的1111 0101 ,以下从最高位开始描述

1)全局颜色表标志global color table flag(1bit),若为0,表示没有全局颜色表示表,若为1,后面则会跟上全局颜色表,示例图片为1;

2)颜色分辨率color resolution(3bit),代表每个像素点的颜色由多少位表示,000为无效,001表示2bits/pixel(即黑白图片),111表示8bits/pixel。

3)排序标志sort flag(1bit),表示是否按照优先顺序排序,把常用的颜色放到前面,主要是为适应早期颜色度低的时期,目前较少使用,但仍保存该位。

4)颜色表长度Global Color Table(3bit),2^(N+1)为颜色表项数,101表示2^6=项,表示最多支持64色的位图。

     可在gifsicle -I信息中查看到Global Color Table的值

     调色盘总长度 = 颜色表长度 * 3,这里调色盘总长度为64*3=192,相当于64种颜色,RGB表示颜色,每种占3字节。

gif原理+gifsicle压缩gif

 

(3)背景色索引、像素高宽比

         背景色索引表示图片的背景颜色。看两篇参考链接,貌似现在没有太多作用了。

 

1.3 全局调色盘

颜色表长度为64,代表全局调色盘占64个颜色,用gifsicle --cinfo xx.gif可以查看颜色表信息

gif原理+gifsicle压缩gif

若调色盘信息中的全局颜色表标志为1,则在十六进制文件中,逻辑屏幕描述符后紧跟着全局调色盘数据,否则不存在全局调色盘数据。

gif原理+gifsicle压缩gif

gifsicle使用--colors参数可以对颜色参数表进行修改,可以发现只有2^2种颜色了。

gif原理+gifsicle压缩gif

 

2 图像帧信息

89a标准下新增了帧数据扩展,

(1)程序扩展结构、(2)注释扩展结构 、(3)图形控制扩展、(4)平滑文本扩展结构

四种扩展均以21打头,程序扩展结构为21 ff、注释扩展结构21 fe 、(3)图形控制扩展21 f9、(4)平滑文本扩展结构21 01

 

二 gifsicle压缩gif∫

 

 

 

 

参考链接:

https://www.cnblogs.com/qcloud1001/p/6647080.html

https://www.jianshu.com/p/df52f1511cf8

https://qastack.cn/graphicdesign/20908/how-to-remove-every-second-frame-from-an-animated-gif

 

分类:

技术点:

相关文章: