gif圖片格式解析

簡介:
GIF(Graphics Interchange Format)CompuServe公司開發像文件存格式,1987開發GIF文件格式版本號是GIF87a1989行了充,充後的版本號定義爲GIF89a
 
GFI像文件以數據(block)爲單位來存儲圖像的相信息。一個GIF文件由表示/像的數據、數據子以及/像的控制信息塊組成,稱GIF數據流(Data Stream)。數據流中的所有控制信息和數據都必在文件(Header)和文件(Trailer)
 
GIF文件格式採用了LZW(Lempel-Ziv Walch)壓縮算法來存儲圖像數據,定了允戶爲圖置背景的透明(transparency)屬性。此外,GIF文件格式可在一個文件中存放多幅彩色/像。如果在GIF文件中存放有多幅,它可以像演幻燈片那樣顯示或者像畫那演示。
 
GIF .
  法是用來表達序列的一符號形式,並用個表達序列中的一些象來形成更大的象。法也用於表達在定的位置出現對象的數目。在此出的法用來明形成gif數據流的序列,用一些規則列表來表達。下面列出用於gif法的符號定
: <> 
::= 符號定
* 0個或更多的事件
+ 1個或更多的事件
替代元素
[] 元素
gif法的符號定:
<GIF 數據流> ::=  <邏輯視> <數據>* 記錄
規則<Gif 數據流>體定如下。它必始,部後面接一個邏輯視體,該實用其他規則來定。最後,數據體接束符。數據體後面的*表示數據體可以在此位置出0或多次。
:
<Gif 數據流> ::=  <邏輯視> <數據>* 記錄
<邏輯視> ::= 邏輯視屏描述 [全局色表]
<數據> ::= <成象> |<特殊用途>
<成象> ::= [象控制] <成象>
<成象> ::= <基於表的> |文本
<
基於表的> ::= 象描述符 [局部色表象數據
<
特殊用途> ::=  |釋擴
 
gif數據流中的數據可以分:控制、成象和特殊用途
控制,如:部、邏輯視屏描述像控制充和尾記錄,包含用於控制理數據流或置硬件參數的信息。
成像,如:像描述符和文本充,包含用於在設備上成像的信息和數據。
特殊用途,如:注釋擴充和充,包含那些既不用於理數據流也不用於在設備上成象的信息。
除了邏輯視屏描述和全局色表之外,特殊用途的作用域是整個數據流,而其他控制的作用域是有限的,限於後面的成象起作用。特殊用途任何控制構成限制,它於解碼過程來是透明的。成象充用於控制充的作用域限定。標記三段:除尾記錄0x3b之外,0x000x7f用於成象;0x800xf9用於控制0xfa0xff用於特殊用途。解器通過識別塊標記的作用域。
 
解釋:
色表- gif格式利用色表來示基於光像。色表分全局色表和局部色表。全局色表於那些沒有置局部色表的像起作用。全局色表的作用域是整個數據流。局部色表接在其後的單張圖像起作用。色表都是可的。
/*
全局色表這東西是我們感興趣的東西,它有點像png格式定義種的調色板,如果要修改gif圖片的顏色,哈哈,修改這個全局色表就可以.如果有全局色表塊,那麼它一定從gif流的14個字節開始(頭部6 + 邏輯視頻描述塊7)
*/
 
以下是各數據塊的說明,如果註明爲版本89a的話,則說明這個數據塊不會在87a版的協議中出現.
 
(6個字節)
              標識() ---GIF
       版本()   ---87a (or 89a)
 
邏輯視屏描述
              邏輯屏幕(2)
              邏輯屏幕高(2)
              Packed Fields (1)
              背景色索引(1)
              象素高(1)
Packed Fields說明:
全局色表 1 Bit
色方案 3 Bits
 1 Bit
全局色表尺寸 3 Bits
解釋:
              背景色索引 - 背景色指向全局色表。背景色是指那些沒有背像覆蓋的屏部分的色。若全局色表志位置0則該字段也被0,並且被忽略。
象素高 - 用於算原像中像素的近似高比。如果字段的值爲0象素的高比由下面的公式
 = (象素高 + 15) / 64
字段的取從最的比41到最高的比14增的1/64
 0 - 沒有比1255 - 用於算的
全局色表 - 指示有沒有全局色表,如果該標志位置1全局色表會接在該塊之後出位也用於解是否用背景色索引字段。若位置1背景色索引字段的將指向背景色表。
色彩方案 - 提供原始像的色的位數減1代表像中所使用的整個調色板的大小,而不是像中所使用的色的數量。例如,若字段的值爲3則圖像中所使用的調色板的個色4位。
 - 表明全局色表是否被排序。如果位置1全局色表按照重要性減的原則進行了排序。典型地,是按照色的使用減排序,使用度最高的色排在色表的最前面。這樣便可幫助解選擇最好的色子集來成象。
全局色表的尺寸 - 如果全局色表志位置1則該字段的值記錄全局色表中所佔用的字數。
 
全局色表
該塊包含一個按照字節順序表示--三元色的色表。全局色表用於那些沒有局部色表像和文本充。在邏輯視屏描述中的全局色表志位置1表示有全局色表。全局色表接在邏輯視屏描述之後,佔用的字
3*2^(全局色表尺寸+1
數據組成格式爲:
              Red 0
              Green 0
              Blue 0
              ……
              Red n
              Green n
              Blue n
 
像控制(版本-89a)
       像控制充包含在理一個成象塊時所需的參數。充只包括一個數據子該塊是可的。通常只有一個像控制充在成象之前。也是在一個數據流中成象控制充的唯一限制。
數據組成格式爲:
       入符(1)
象控制標記(1)
尺寸(1)
<Packed Fields>
長時間(2)
透明色索引(1)
塊結(1)
Packed Fields說明:
保留 3 Bits
配置方法 3 Bits
戶輸 1 Bit
透明 1 Bit
解釋:
充引入 - 用於識別一個始,字段固定0x21
像控制 - 識別當前是否爲圖形控制充。字段固定 0xF9
尺寸 - 中所包含的字數。從尺寸字段始到快束符(不含束符)。字段包含固定4
配置方法 - 指示示後的理方法。:
0 - 無指定的配置,解器不需要做任何理。
1 - 不做配像將被留在原位置。
2 - 背景色。像所佔的區域必須備復爲背景色。
3 - 以前的色。解器需要將像區域恢復爲原來成象的色。
4-7 - 未定
戶輸 - 明在繼續處理之前是否需要用戶輸入。可以和入延一起使用。
透明 - 表明在透明索引字段是否定透明索引。
 - 如果不0, 字段指定以1/100爲單位的延數。
透明索引 - 如果遇到透明索引,則顯設備的相象素不被改繼續處理下一個象素。
塊終止符 - 0度字段志着像控制充得束。
 
像描述符
一幅像必邏輯視屏描述中所定邏輯視屏界限之內。像描述符包含理一個基於像的表的必要參數。在定的坐是參照邏輯視屏的像素坐該塊是一個成象,在其前面可以選擇加上一個或多個控制,如:像控制充,或者是後面接有局部色表;像描述符後面像數據。它是一幅所必需的。一幅對應一個像描述符。
數據組成格式爲:
       象分隔符(1)
              象左坐(2)
       (2)
              (2)
       象高度(2)
       (2)
       <Packed Fields>(1)
Packed Fields說明:
局部色表 1 Bit
隔行 1 Bit
 1 Bit
保留 2 Bits
局部色表尺寸 3 Bits
解釋:
像分隔符 - 用於識別圖像描述符的始。取固定0x2c
 
局部色表
該塊包含一個按照--三原色的序排列的色表。表作用於跟其後的數據。當局不色表志位置1表出,且其後像的描述符,它所包含的字數等於
3*2^(局部色表尺寸+1
數據組成格式爲:
              Red 0
              Green 0
              Blue 0
              ……
              Red n
              Green n
              Blue n
基於表的像數據
基於表的像數據由一系列子塊組成,個子最多255,包含一個爲圖個象素所指定的有效色表的索引。索引的序用LZW算法編碼
數據組成格式爲:
           LZW 最小編碼尺寸(1)
       象數據數據子(n)
解釋:
LZW 最小編碼尺寸用於決定在像數據中用 LZW 編碼最初的位數。
 
釋擴(版本-89a)
釋擴充包含實際不屬於gif數據流的文本信息。它適用於包括像注、描述或者任何其他非控制和非像數據。注釋擴充將被解器忽略,或者被保留到以後理。在任何情況下注釋擴充也不能中斷數據流的理。該塊是可的;在數據流中的出量不加限制。
數據組成格式爲:
       入符(1)
       釋標記(1)
       數據數據子(n)
塊結束符(1)
解釋:
入符 - 標識擴充的始。字段固定0x21
釋標 - 示某塊爲釋擴充。固定0xFE
數據 - 按照子塊順序,個注最少1最多255。序列尾用塊結束符標識
塊結束符 -用來標識釋擴充的束。
 
文本(版本-89a)
文本充包括文本數據和將數據爲圖像所必需的參數。文本數據將用7位可印刷ASCII字符編碼。文本數據用在字段中定元格字符元素來成象。個字符用一個元成象。該塊使用全局色表。它可以被形控制充來修改。該塊爲選塊
數據組成格式爲:
       入符(1)
       文本標記(1)
尺寸(1)
文本格左坐(2)
文本格(2)
文本格(2)
文本格高度(2)
字符(1)
字符(1)
文本前景色索引(1)
文本背景色索引(1)
文本數據數據子(n)
塊結束符(1)
解釋:
入符 - 標識一個始。取固定0x21.
文本標記 - 標識當前塊爲原文充。取固定0x01.
尺寸 - 充中的字數,取固定12.
文本格左位置 - 邏輯視屏的左,用象素表示的左列數,
文本格位置 - 邏輯視屏的上,用象素表示的上行數。
原文數據 - 序列,個子最少1最多255序列遇到塊結束符時結束。
塊結束符– 0,用來塊結束。
 
(版本-89a)
充包含明信息;它遵守如下所述的法,塊標記爲0xff.
數據組成格式爲:
       入符(1)
       標記(1)
              尺寸(2)
       標識(8)
(3)
用數據數據子(n)
塊結束符(1)
解釋:
充引入符 - 義該塊。取固定0x21.
標記 - 標識該塊爲應。取固定0xFF.
尺寸 - 指示該塊中包含的字數。取固定11.
標識 - 8格可印刷ASCII字符用來標識該應用所屬的充。
 - 3格字的序列用於標識符。一個用程序可以一算法來算一個二來唯一地識別這用是否數於充。
 
記錄
該塊爲一個字段,用來指示數據流的束。取固定0x3b.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章