PNG、JPEG、BMP (IV)-GIF等几种格式的详细说明

以下部分来自百度百科,部分为本人观点。写这篇文章的目的是让大家了解百度上已有的知识,但你不必再去百度了。对这种图片格式也有很深的理解。看完这篇文章,包括我在内,都会觉得即使是很小的知识点,以后也会很深刻。其中的底层和深层原理是我最喜欢的,这也是我写博客的初衷。

GIF(图形交换格式)原意为“图像交换格式”,是CompuServe公司在1987中开发的一种图像文件格式。GIF文件的数据是基于LZW算法的连续色调无损压缩格式。它的压缩比一般在50%左右,不属于任何应用。GIF格式可以存储多种颜色的图像。如果将存储在一个文件中的多个图像的数据逐个读出并显示在屏幕上,就可以构成最简单的动画。

GIF图片基于颜色列表(存储的数据是该点的颜色对应颜色列表的索引值),最多只支持8位(256种颜色)。GIF文件被分成许多存储块,用来存储多个图像或决定图像表现行为的控制块,从而实现动画和交互式应用。GIF文件还通过LZW压缩算法压缩图像数据,以减小图像尺寸。

GIF格式是CompuServe公司在1987推出的。由于体积小,成像相对清晰,特别适合早期网速慢的情况,很受欢迎。

在早期,GIF中使用的LZW压缩算法是由Compuserv开发的免费算法。然而,令许多软件开发者惊讶的是,GIF文件中使用的压缩算法突然成了Unisys的专利。

据优利系统公司称,他们已经注册了LZW算法的W部分。如果你想开发一个生成(或显示)GIF文件的程序,你需要向公司支付版税。因此,人们开始寻求一种新的技术来降低开发成本。PNG(便携式网络图形)标准就是在这种背景下产生的。一方面满足了市场对法律限制较少的需求,另一方面也带来了较少的技术限制,比如颜色的数量。

2003年6月20日,LZW算法在美国的专利权到期。欧洲、日本和加拿大的专利也分别于2004年6月18日、6月20日和7月7日到期。然而,凭借其技术优势,PNG文件格式已成为网络上第三大最广泛使用的格式。GIF相关专利于2006年8月11日到期。

一直以来,iOS都被吐槽不能用GIF。造成这种情况的主要原因是:

Gif可分为静态GIF和动画GIF,扩展名为。GIF。GIF是一种压缩位图格式,支持透明背景图像,适用于各种操作系统。GIF很小,网上很多小动画都是GIF格式的。gif其实就是将多张图片保存为一个图片文件,从而形成一个动画。最常见的就是一张一帧一帧动画串联起来的搞笑GIF图片,所以说到底GIF还是一种图片文件格式。

但是GIF只能显示256色。和jpg格式一样,这是互联网上非常流行的图形文件格式。

GIF主要分为两个版本,分别是GIF 89a和GIF 87a。

这里给出的语法用于解释形成gif数据流的块序列,它由一些规则列表表示。下面列出了用于gif语法的符号定义。

gif语法的符号定义:::= Head& lt;数据> *尾部记录

gif数据流中的数据块可以分为三组:控制块、成像块和专用块。

颜色表-gif格式使用颜色表来显示基于光栅的图像。颜色表分为全局颜色表和局部颜色表。全局颜色表适用于没有设置本地颜色表的图像。全局颜色表的范围是整个数据流。本地颜色表适用于紧随其后的单个图像。两种颜色表都是可选的。

全局颜色表是我们感兴趣的东西。有点像png格式定义的调色板。如果想修改gif图片的颜色,哈哈,可以修改这个全局颜色表。如果有全局颜色表块,必须以14字节的gif流开始(前6+7个逻辑视频描述块)。

以下是对每个数据块的描述。如果标记为89a版本,则表示该数据块不会出现在87a版本的协议中。

打包字段解释道:

GIF文件被分成块,包括控制块和数据子块。控制块控制数据块的行为,并根据不同的控制块包含一些不同的控制参数。数据块只包含一些8位字符流,其功能由前面的控制块决定。每个数据块的大小范围从0到255字节。数据块的第一个字节表示数据块的大小(字节数),在计算数据块大小时不包括在内,所以一个空数据块有一个字节,即数据块0x00的大小。下表显示了数据块的结构:

GIF文件的结构可以分为三部分:文件头、GIF数据流和文件尾。文件头包含GIF文件签名和版本);号码;GIF数据流由控制标识符、图像块和其他扩展块组成。文件终止符只有一个字符(“”);)表示文件的结尾。下表显示了GIF文件的结构:

用于识别GIF签名和版本号。

GIF签名用于确认文件是否为GIF格式。这部分由三个字符组成:“GIF”;文件版本号也由三个字节组成,可以是“87a”,也可以是“89a”。具体如下图所示。

它包含许多部分。

(1)逻辑屏幕描述符:该部分由7个字节组成,定义了GIF图像的大小(逻辑屏幕宽度&高度)、颜色位、背景色(Blackground ColorIndex)以及是否有全局颜色表和颜色列表的IndexCount,如下图所示。

也可以参考下图。

(2)全局颜色表:

全局颜色列表必须紧跟逻辑屏幕标识符,并且每个颜色列表索引条目由三个字节组成,按照R、G和B的顺序排列..

(3)图像描述符:一个GIF文件可以包含多张图像,一张图像后面跟着一个图像标识符。图像标识符以字符0x2C(' ','')开始,并定义紧随其后的图像的属性,包括图像相对于逻辑屏幕边界的偏移量、图像大小、本地颜色列表的存在与否以及颜色列表的大小(10字节)。

也可以参考下图。

(4)局部颜色表:如果设置了上述局部颜色列表标志,则需要在这里(紧接在图像标识符之后)为它后面的图像定义一个局部颜色列表。注意,使用前应在线保存原始颜色列表,使用后应恢复原始保存的全局颜色列表。如果GIF文件不提供全局颜色列表或局部颜色列表,您可以自己创建颜色列表或使用系统颜色列表。局部颜色列表的排列方式与全局颜色列表相同:RGBRGB。......

(5)基于表格的图像数据:它由两部分组成:LZW最小码长和图像数据。

下面给出了总体存储结构的示意图。

Adobe ImageReady和fireworks是PC上生产的主要软件。

Gif在线制作和编辑gif5.net在网页上,支持图片,视频和FLASH到GIF。

我一般用LICEcap做gif图。

1 .百度百科

2.GIF图片的文件存储结构和动画原理。

3.深入分析了GIF图像的原理和存储结构。