GIF标准及其解码

更新时间:2023-05-23 14:16:02 阅读: 评论:0

                              GIF标准及其解码
GIF(Graphics Interchange Format)CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a1989年进行了扩充,扩充后的版本号定义为GIF89a
一, 概述:
GIF文件由文件头,描述块,彩色表,数据块,扩展块和结束符构成,GIF87a和GIF89a的区别在于:后者较前者增加了扩展块,从功能上看即提供了对透明色和多帧动画的支持。
二, 格式详解:
约定:
i: 以下图示括号中出现的“B”代表字节(Byte),而“b”则代表字节中的位(bit)。
ii:两个字节以上数的存放顺序为低字节在前。
iii:文件格式中出现的大小尺寸等均为unsigned数据类型,单位为字节或像素。
iv:各描述结构块以在文件中出现的先后顺序而排列。
v:符号约定:*表示名词解释 ,#表示效果演示 ,【】表示参考文献。
1,Header结构:
说明:Signature  为“GIF”3个字符;Version 为“87a”或“89a”3个字符。
2,Logical Screen Descriptor结构:
    说明:Logical Screen Width 和Logical Screen Depth 均以像素为单位。
      Packet fields 中最高位为全局颜色表标志,即为1时表明Logical Screen Descriptor后面跟的是全局颜色表。
      Color Resolution 的值加1代表颜色表中每种基色用多少位表示,如为“111”时表示每种基色用8位表示,则颜色表中每项为3Byte。由于该值有时可为0,一般在解码程序中,该3位不作处理,而直接由Global Color Table Size 算出颜色表大小。
          Sort Flag 表示重要颜色排序标志,标志为1时,表示颜色表中重要的颜色排在前面,有利于颜色数较少的解码器选择最好的颜色。一般该标志为0,不作处理。
脱机工作          Global Color Table 的值加1作为2的幂,算得的数即为颜色表的项数,实际上颜色表每项由RGB三基色构成,每种基色占一个字节,则颜色表占字节数为项数的3倍。由于最大值为“111”,故颜色表的项数最多为256项,即256种颜色,8位每基色则颜色表大小为768 Bytes。
Note:“256种颜色”是指这256种颜色是编码器在由24位原始位图数据生成GIF文件时从262K色中选取的,生成的图像一样可以很鲜艳#。胡荣泉
Background Color Index 表示背景颜色索引值*。可以这样理解:在指定大小显示区,GIF图像的大小可能小于显示区域大小,显示区中剩余的区域则一律用背景颜色索引值在全局
颜色表中对应的颜色填充。在实际解码过程中,在显示图像之前可将显示区域全部用该颜色填充。
*颜色索引值:颜色索引值是一个在颜色表中的序号值,即该序号对应的颜色值。
        Pixel Aspect Ratio 表示像素宽高比,一般为0,不作处理,直接以Logical Screen 宽和高作处理。如该项不为0,则参照GIF89a标准【1】计算。
  3,Global Color Table 结构:
              出口买方信贷
                颜色表每项由3原色RGB表示,依次排放,大小由前面的Logical Screen Descriptor
决定。一般GIF图像用256色,每种基色用8位,则有768个字节大小的颜色表。
  4,Image Descriptor 结构:
Image Separator 固定为0x2C(ASCII码中代表“,”)。
Image Left position + Image Top position 表示Image Descriptor 后面跟的一幅图像(块)起始点相对(逻辑)屏幕原点(令其为最左上角点)的位移。
Image Width + Image Depth 表示Image Descriptor 后面跟的一幅图像(块)的实际宽和高,不应该超过Logical Screen Width 和Logical Screen Depth的大小。
以上四项信息在显示多帧图像(动画)时尤其要注意,因为每帧更新的区域有可能都不一样#。
Local Color Table Flag 局部颜色表标志,为1时表示Image Descriptor后面跟的是下幅图像所用的颜色表,此时Global Color Table(全局颜色表)无效。
Note:对于GIF中的一幅图像,可能只有全局颜色表(如静态图像,GIF87a图像和大部分多帧动画),可能没有全局颜色表而每幅图像有各自的局部颜色表(GIF电影片断动画较常见),可能两种颜色表都有(即为上面考虑的情况),也可能两种颜色表都没有(此种情况要用系统颜色表,本文不作考虑)。
Interlace Flag 交错显示标志,为1时表示图像数据是以隔行方式存放的。最初GIF标准设置此标志的目的是考虑到通信设备间传输速度不理想情况下,用这种方式存放和显示图像,就可以在图像显示完成之前看到这幅图像的概貌,慢慢的变清晰,而不觉得显示时间过长。具体扫描行顺序参见GIF89a标准【儿白是什么意思1】。作为单机显示系统来讲,可以采取逐次行显示方式,也可以采取逐次全屏显示方式(此时将看不到交错效果),依据显示系统的刷新显示性能,解码程序设计者可以选择权衡的。
Sort Flag  与Global Color Table中Sort Flag含义相同。
Rerved  保留。
Local Color Table Size 局部颜色表大小,计算方法与Global Color Table中的方法一致。米奇狠狠干
5,Local Color Table 结构:
          与Global Color Table 结构一致,因而处理方式也与后者一样。要注意的是,遇到
鲜花和荆棘
          Local Color Table 时,Global Color Table 对Local Color Table对应的图像无效,即用此时用Local Color Table 取代Global Color Table。
      6,Table Bad Image Data 结构:
          GIF文件格式所采用的是LZW图像压缩算法,它是一种基于String Table的字典压缩算法,具体算法过程参见LZW Data Compression【2】。
            压缩后的数据组织结构如下:
 
          LZW Code Size 表示表示一个像素索引值所用的最少比特位数,如:该值为0x08时表示解码后的每个像素索引值为8位(一个字节,可以表示256种颜色)。
          Block  压缩图像数据块,Block Size 用一个unsigned char型数表示块的大小(单位为Byte),因此每块最大可为255 Bytes,Block Data存放的是压缩图像数据。压缩后的图像Block在一幅图像域*中可以有若干个。
          *图像域: 由每个Image Descriptor后面对应的Local Color Table(possible) ,Table Bad Image Data block和Extension block(possible)构成。包含了在Image Descriptor指定位置显示一幅图像的所有信息和数据。
          Block Terminator 固定为0x00,表示该幅图像域的结束。
     
以下描述的是扩展块,由GIF89a标准【1】支持
约定:拌豆腐Extension Introducer 扩展导入符,固定为0x21(ASCII码中代表“!”)。
        Application Label 应用扩展块标签,值为0x00~0xFF。
Block Terminator 固定为0x00。
7,Application Extension结构:
Block Size  表示Application Data 的大小。
        Application Information 为11Bytes的应用程序信息,包含制作GIF文件的应用程序的相关信息。前8字节为应用程序标示符(程序名称),后3字节为应用程序识别码。
        Application Data 为Block Size 字节的数据。
    8,Comment Extension 结构:
     
晴歌词
      Block Size  表示Comment Data 的大小。
      Comment Data 用来说明图形,作者和其他任何非图形数据和控制信息的文本信息。
  9, Graphic Control Extension 结构:
                  Block Size 的值应该固定为0x04,即块数据大小为4Bytes。
            Display Method 一般值为1,即不作其他特殊处理。其他值处理方式参见GIF89a【1】
            Ur Input Flag 用户输入标志,为1时表示处理完该图像域后等待用户的输入后才开始下一图像域的处理。
            Delay Time  表示处理完该图像域到开始处理下一个图像域的延迟时间,单位是1/100秒。
Note:如果同时出现Ur Input Flag 置位和Delay Time不为0的情况下,则在      Delay Time定时到之前有用户输入,或者没有用户输入而Delay Time定时到这两种情况下,都会触发下一图像域的处理。
Transparent Color Flag 表示透明颜色索引标志,该标志置位表示透明颜色索引有效。
Transparent Color Index 表示透明颜色索引,在透明颜色索引有效情况下,解码所得颜色索引与该索引值相等时,数据将不作处理(不更新对应像素)。
Note:什么是透明?透明一般用在多帧图像显示中,例如计划对第一幅图像的一小块区域做更新,而实际上第二幅图像的Image Descriptor指定的区域要比预期的大。对于编码器而言,这多余位置的数据就相当于编码成了透明色索引,解码器解码时就知道这些数据可以不处理,从效果上看就像那些像素是“透明”的,没有破坏第一幅图像的对应区域。如果没有考虑透明处理,那么相应区域就将被刷新为索引色(一般是黑色),这是我们不希望看到的。

本文发布于:2023-05-23 14:16:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/925162.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:颜色   图像   显示   表示   处理   数据   标志
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图