当前位置:首页 > 技术问答

gif的文件格式?

Posted by admin

谁能告诉我gif文件具体的格式是什么?  
  谢谢

参考文章:

  • 微软公司推出系统管理软件SMS 2003 R2版
  • 趋势分析:双核刀片将主导中国市场
  • 浪潮发布易翔服务器 上市价低于1.2万
  • 曙光第二代刀片服务器-TC1600震撼上市
  • 技嘉GS-SR168服务器:按需调控 节约电能
  • 入门级服务器:超毅定制者110P-1802CT-L
  • 超毅320X:部门级服务器及存储好选择
  • 宝德发布机架至强双核服务器PR1700G4
  • IBM推出新款刀片服务器 采用Cell芯片
  • eNet独家直播Engenera中国首次发布
  • 网友回答:
    发表者:guoyin

    留个伊妹儿我发给你

    发表者:painache

    1.概述  
      ~~~~~~~~  
        gif(graphics   interchange   format,图形交换格式)文件是由   compuserve公司  
      开发的图形文件格式,版权所有,任何商业目的使用均须   compuserve公司授权。  
        gif图象是基于颜色列表的,  
      最多只支持8位。gif文件内部分成许多存储块,用来存储多幅图象或者是决  
      定图象表现行为的控制块,用以实现动画和交互式应用。gif文件还通过lzw压缩算法  
      压缩图象数据来减少图象尺寸。  
      2.gif文件存储结构  
      ~~~~~~~~~~~~~~~~~~~  
        gif文件内部是按块划分的,包括控制块和数据块  
      两种。控制块是控制数据块行为的,根据不同的控制块包含一些  
      不同的控制参数;数据块只包含一些8-bit的字符流,由它前面的控制块来决定它的功  
      能,每个数据块大小从0到255个字节,数据块的第一个字节指出这个数据块大小,  
      计算数据块的大小时不包括这个字节,所以一个空的数据块有一个字节,那就是数据块的  
      大小0x00。下表是一个数据块的结构:  
      byte  
        7  
        6  
        5  
        4  
        3  
        2  
        1  
        0  
        bit  
        块大小  
        block   size   -   块大小,不包括这个这个字节  
           
        data   values   -   块数据,8-bit的字符串  
           
      ...  
           
      254  
           
      255  
           
        一个gif文件的结构可分为文件头(file   header)、gif数据流(gif   data   stream)和  
      文件终结器(trailer)三个部分。文件头包含gif文件署名(signature)和版本号(version);  
      gif数据流由控制标识符、图象块(image   block)和其他的一些扩展块组成;文件终结器只  
      有一个值为0x3b的字符表示文件结束。下表显示了一个gif文件的组成结构:  
        gif署名  
        文件头  
        版本号  
        逻辑屏幕标识符  
        gif数据流  
        全局颜色列表  
        ...  
        图象标识符  
        图象块  
                              
        图象局部颜色列表图  
                          
        基于颜色列表的图象数据  
        ...  
        gif结尾  
        文件结尾  
        下面就具体介绍各个部分:  
      文件头部分(header)  
      ~~~~~~~~~~~~~~~~~  
      gif署名(signature)和版本号(version)  
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      gif署名用来确认一个文件是否是gif格式的文件,这一部分由三个字符组成:  
      "gif";文件版本号也是由三个字节组成,可以为"87a"或"89a".具体描述见下表:  
      byte  
        7  
        6  
        5  
        4  
        3  
        2  
        1  
        0  
        bit  
        g  
        gif文件标识  
        i  
        f  
        8  
        gif文件版本号:87a   -   1987年5月  
                89a   -   1989年7月  
        7或9  
        a  
      gif数据流部分(gif   data   stream)  
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      逻辑屏幕标识符(logical   screen   descriptor)  
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      这一部分由7个字节组成,定义了gif图象的大小(logical   screen   width   &   height)、颜  
      色深度(color   bits)、背景色(blackground   color   index)以及有无全局颜色列表(global  
        color   table)和颜色列表的索引数(index   count),具体描述见下表:  
      byte  
        7  
        6  
        5  
        4  
        3  
        2  
        1  
        0  
        bit  
        逻辑屏幕宽度  
        像素数,定义gif图象的宽度  
        逻辑屏幕高度  
        像素数,定义gif图象的高度  
        m  
        cr  
        s  
        pixel  
        具体描述见下...  
        背景色  
        背景颜色(在全局颜色列表中的索引,如果没有全局颜色列表,该值没有意义)  
        像素宽高比  
        像素宽高比(pixel   aspect   radio)  
      m   -   全局颜色列表标志(global   color   table   flag),当置位时表示有全局颜色列表,pixel值有意义.  
      cr   -   颜色深度(color   resolution),cr+1确定图象的颜色深度.  
      s   -   分类标志(sort   flag),如果置位表示全局颜色列表分类排列.  
      pixel   -   全局颜色列表大小,pixel+1确定颜色列表的索引数.  
      全局颜色列表(global   color   table)  
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      全局颜色列表必须紧跟在逻辑屏幕标识符后面,每个颜色列表索引条目由三个字节组成,  
      按r、g、b的顺序排列。  
      byte  
        7  
        6  
        5  
        4  
        3  
        2  
        1  
        0  
        bit  
        索引1的红色值  
        索引1的绿色值  
        索引1的蓝色值  
        索引2的红色值  
        索引2的绿色值  
        索引2的蓝色值  
        ...  
                             
      图象标识符(image   descriptor)  
      ~~~~~~~~~~~~~~~~~~~~~~~~~  
      一个gif文件内可以包含多幅图象,一幅图象结束之后紧接着下是一幅图象的标识符,  
      图象标识符以0x2c(,)字符开始,定义紧接着它的图象的性质,包括图象相对于逻  
      辑屏幕边界的偏移量、图象大小以及有无局部颜色列表和颜色列表大小,由10个字节组成:  
      byte  
        7  
        6  
        5  
        4  
        3  
        2  
        1  
        0  
        bit  
        0  
        0  
        1  
        0  
        1  
        1  
        0  
        0  
        图象标识符开始,固定值为,  
        x方向偏移量  
        必须限定在逻辑屏幕尺寸范围内  
        y方向偏移量  
        图象宽度  
        图象高度  
      10  
        m  
        i  
        s  
        r  
        pixel  
        m   -   局部颜色列表标志(local   color   table   flag)  
        置位时标识紧接在图象标识符之后有一个局部颜色列表,供紧跟在它之后的一幅图  
      象使用;值否时使用全局颜色列表,忽略pixel值。  
      i   -   交织标志(interlace   flag),置位时图象数据使用交织方式排列,  
      否则使用顺序排列。  
      s   -   分类标志(sort   flag),如果置位表示紧跟着的局部颜色列表分类排列.  
      r   -   保留,必须初始化为0.  
      pixel   -   局部颜色列表大小(size   of   local   color   table),pixel+1就为颜色列表的位数  
      局部颜色列表(local   color   table)  
      ~~~~~~~~~~~~~~~~~~~~~~~~~~  
      如果上面的局部颜色列表标志置位的话,则需要在这里定义  
      一个局部颜色列表以供紧接着它的图象使用,注意使用前应线保存原来的颜色列表,使  
      用结束之后回复原来保存的全局颜色列表。如果一个gif文件即没有提供全局颜色列表,  
      也没有提供局部颜色列表,可以自己创建一个颜色列表,或使用系统的颜色列表。局部  
      颜色列表的排列方式和全局颜色列表一样:rgbrgb......  
      基于颜色列表的图象数据(table-based   image   data)  
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      由两部分组成:lzw编码长度(lzw   minimum   code   size)和图象数据(image   data)。  
      byte  
        7  
        6  
        5  
        4  
        3  
        2  
        1  
        0  
        bit  
        lzw编码长度  
        lzw编码初始码表大小的位数,详细描述见lzw编码...  
         
         
      ...  
        图象数据,由一个或几个数据块(data   sub-blocks)组成  
      数据块  
      ...  
      gif图象数据使用了lzw压缩算法,  
      大大减小了图象数据的大小。图象数据在压缩前有两种排列格式:连续的和交织的(由  
      图象标识符的交织标志控制)。连续方式按从左到右、从上到下的顺序排列图象的光栅  
      数据;交织图象按下面的方法处理光栅数据:  
      创建四个通道(pass)保存数据,每个通道提取不同行的数据:  
      第一通道(pass   1)提取从第0行开始每隔8行的数据;  
      第二通道(pass   2)提取从第4行开始每隔8行的数据;  
      第三通道(pass   3)提取从第2行开始每隔4行的数据;  
      第四通道(pass   4)提取从第1行开始每隔2行的数据;  
      下面的例子演示了提取交织图象数据的顺序:  
      行  
         通道1   
         通道2   
         通道3   
         通道4   
      0 --------------------------------------------------------  
        1  
      1   --------------------------------------------------------  
        4  
      2 --------------------------------------------------------  
        3  
      3 --------------------------------------------------------  
        4  
      4 --------------------------------------------------------  
        2  
      5 --------------------------------------------------------  
        4  
      6 --------------------------------------------------------  
        3  
      7 --------------------------------------------------------  
        4  
      8 --------------------------------------------------------  
        1  
      9 --------------------------------------------------------  
        4  
      10   --------------------------------------------------------  
        3  
      11   --------------------------------------------------------  
        4  
      12   --------------------------------------------------------  
        2  
      13   --------------------------------------------------------  
        4  
      14   --------------------------------------------------------  
        3  
      15   --------------------------------------------------------  
        4  
      16   --------------------------------------------------------  
        1  
      17   --------------------------------------------------------  
        4  
      18   --------------------------------------------------------  
        3  
      19   --------------------------------------------------------  
        4  
      20   --------------------------------------------------------  
        2  
         
     

    .