日本語訳 GIF87a 仕様書 最終更新日: 1998年9月13日 現在、本文書は CompuServe社から翻訳・配布の許可を得ていません、 再配布は、ご遠慮ください。 誤りなどがございましたら、下記宛てにご連絡ください: "Yukinori Watanabe" / 日本語訳GIF仕様書の配布元: http://www.geocities.co.jp/SiliconValley/3453/gif_info/index_jp.html Japanese translation Copyright (C) 1998 Yukinori Watanabe ______________________________________ G I F (tm) Graphics Interchange Format (tm) ラスタ方式グラフィックス情報の 格納と伝送のための機構を定義する規格 1987年6月15日 (c) CompuServe Incorporated, 1987 All rights reserved 本文書は、著作権で保護されていますが、 本文書に含まれる情報をロイヤルティやライセンスの制限なしで コンピュータ・ソフトウェアにおいて使用できるものとします。 GIF 及び 'Graphics Interchange Format' は、 米国 CompuServe, Incorporated の商標です。 5000 Arlington Centre Blvd. Columbus, Ohio 43220 (614) 457-8600 日本語訳GIF87a仕様書 Graphics Interchange Format (GIF) 仕様書 目次 頁 まえがき . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ファイル・フォーマットの概略 . . . . . . . . . . . . . . . . . 2 GIF署名 (GIF SIGNATURE) . . . . . . . . . . . . . . . . . . . . 2 画面記述部 (SCREEN DESCRIPTOR) . . . . . . . . . . . . . . . . 3 広域配色表 (GLOBAL COLOR MAP) . . . . . . . . . . . . . . . . . 4 画像記述部 (IMAGE DESCRIPTOR) . . . . . . . . . . . . . . . . . 5 狭域配色表 (LOCAL COLOR MAP) . . . . . . . . . . . . . . . . . 5 ラスタ・データ (RASTER DATA) . . . . . . . . . . . . . . . . . 6 GIF終了部 (GIF TERMINATOR) . . . . . . . . . . . . . . . . . . 6 GIF拡張ブロック (GIF EXTENSION BLOCKS) . . . . . . . . . . . . 7 付録A.用語解説 (GLOSSARY) . . . . . . . . . . . . . . . . . . 7 付録B.対話シーケンス (INTERACTIVE SEQUENCES) . . . . . . . . 8 付録C.画像の梱包と圧縮 (IMAGE PACKAGING & COMPRESSION) . . . 10 付録D.多重画像処理 (MULTIPLE IMAGE PROCESSING) . . . . . . . 12  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■ まえがき 'GIF' (tm)は、汎用のカラー・ラスタ画像を定義するための CompuServe の 規格です。この 'Graphics Interchange Format' (tm) (グラフィックス交換 フォーマット) は、高品質、高解像度グラフィックスを様々なグラフィックス・ ハードウェア上に表示できるようにします、しかも、グラフィックス画像の交 換と表示の手法としての目的を持ちます。本文書に記述されている画像フォー マットは、現在および将来の画像技術を支援するために設計され、また、将来 の CompuServe のグラフィックス製品のための基盤として役立てられます。 本ドキュメントの主眼は、GIF 符号器(encoder)と復号器(decoder)を実現す るプログラマのために必要な技術情報を提供することです。このようなことか ら、一般的なグラフィックスとプログラミングに関連した専門用語に関して、 ご存知であるものと仮定させていただきます。 本文書の初めのセクションは、 GIFデータ・フォーマットとその構成要素に ついて記述しています、そして、独立型のプログラムとして、あるいは、通信 パッケージの一部としてのGIF復号器すべてに適用されます。付録Bは、 通信 ソフトウェア・パッケージの一部としての復号器に対して意味のあるセクショ ンです。ここには、 GIFモードへの出入りとホストからの問い合せに対する応 答のためのプロトコルの要求事項を記述しています。付録Aの用語解説は、本 文書で使用される専門用語のいくつかを定義しています。付録Cはグラフィッ クス画像自身をどのようにデータとしてのバイトの連なりに梱包するかについ て詳細に解説しています。 日本語訳GIF87a仕様書 - 1 - Graphics Interchange Format データ定義 ■ ファイル・フォーマットの概略 ┏━━━━━━━━━━┓ ┃┌────────┐┃ ┃│ GIF署名  │┃ ┃└────────┘┃ ┃┌────────┐┃ ┃│ 画面記述部  │┃ ┃└────────┘┃ ┃┌────────┐┃ ┃│ 広域配色表  │┃ ┃└────────┘┃ 〜〜〜〜〜〜〜〜〜〜〜 〜〜〜〜〜〜〜〜〜〜〜 ┃┌────────┐┃───┐ ┃│ 画像記述部  │┃   │ ┃└────────┘┃   │ ┃┌────────┐┃   │ ┃│ 狭域配色表  │┃   ├ 1〜n回繰り返される ┃└────────┘┃   │ ┃┌────────┐┃   │ ┃│ラスタ・データ │┃   │ ┃└────────┘┃───┘ 〜〜〜〜〜〜〜〜〜〜〜 〜〜〜〜〜〜〜〜〜〜〜 ┃− GIF終了部 −┃ ┗━━━━━━━━━━┛ ■ GIF署名 (GIF SIGNATURE) 下記のGIF署名は、それに続くデータを有効なGIF画像ストリームとして識別 します。GIF署名は、下記の6文字からなります。 G I F 8 7 a 最後の3文字 '87a' は、このGIF定義を特定するバージョン番号とみなしま す、そして、何らかのバージョン依存を表明する GIFに関する文書中で基準を 示すものとして一般的に使用されることになります。 日本語訳GIF87a仕様書 - 2 - ■ 画面記述部 (SCREEN DESCRIPTOR) 画面記述部は、後続する全ての GIF画像のために、終始にわたるパラメータ を記述します。ここには、画像空間の終始にわたる寸法、つまり、要求される 論理画面(logical screen)と、配色(color mapping)情報の有無、背景画面色 (background screen color)、色深度(color depth)情報を定義します。この情 報は、下記のように8ビットのバイトの連なりに格納されます。 ビット バイト 7 6 5 4 3 2 1 0 番号 +---------------+ | | 1 +- 画面幅 -+ 画素単位のラスタ幅 (LSBが最初)。 |(Screen Width) | 2 +---------------+ | | 3 +- 画面高さ -+ 画素単位のラスタ高さ (LSBが最初)。 |(Screen Height)| 4 +-+-----+-+-----+ M が1なら広域配色表が画面記述部に続く。 |M| cr |0|pixel| 5 cr+1 = 色解像度(color resolution)のビット数。 +-+-----+-+-----+ pixel+1 = 画像の画素あたりのビット数。 | 背景色指標 | 6 画面背景の色指標(color index)。 +---------------+ (色は広域配色表から定義される。広域配色表 |0 0 0 0 0 0 0 0| 7 がない場合は省略時の配色表を使う。) +---------------+ 論理画面(logical screen)の幅と高さは、両方とも物理的な表示装置よりも 大きくなることができます。物理的な表示装置より大きい画像がどのように扱 われるかは、実現先に依存します。つまり、ハードウェアの特色(たとえば、 マッキントッシュのスクロールするウィンドウ)による利点を取り入れること ができますし、さもなくば、画像を表示装置の縁で切り落とすこともできます。 'pixel' (訳注:広域配色表の寸法)の値は、画像中の最大の色数をも定義し ています。'pixel' の値の範囲は、1〜8ビットを表現する、0〜7です。こ れは、2色(黒と白)から 256色の範囲に解釈されます。第5バイトのビット 3は、将来の定義のために予約されています、0でなければなりません。 日本語訳GIF87a仕様書 - 3 - ■ 広域配色表 (GLOBAL COLOR MAP) 広域配色表の有無は随意ですが、正確な色の解釈が望まれる画像には、置く ようお勧めします。この配色表の有無は、画面記述部の第5バイトの 'M' 欄 (訳注:広域配色表フラグ)で指示します。後述するように、 GIFファイル中の 各々の画像毎に配色表を関連付けることもできますが、現在の利用可能な装置 におけるハードウェア上の制限のため、通常は広域配色表が使用されるでしょ う。通常、個々の画像記述部(Image Descriptor)中の 'M'フラグ (訳注:狭域 配色表フラグ) は、0であるでしょう。もし、広域配色表が存在するのならば、 画面記述部の直後に定義します。画面記述部に続く配色表の項目の個数は、2 を『画素あたりのビット数 (訳注:pixel+1)』で累乗した数と同じです。そし て、各項目は、赤・緑・青の相対的な輝度を個別に表す3バイトの値からなり ます。配色表ブロックの構造は、下記のようになっています。 ビット バイト 76543210 番号 ┏━━━━━━━━┓ ┃  赤色輝度  ┃ 1 色指標0の赤色値 ┠────────┨ ┃  緑色輝度  ┃ 2 色指標0の緑色値 ┠────────┨ ┃  青色輝度  ┃ 3 色指標0の青色値 ┣━━━━━━━━┫ ┃  赤色輝度  ┃ 4 色指標1の赤色値 ┠────────┨ ┃  緑色輝度  ┃ 5 色指標1の緑色値 ┠────────┨ ┃  青色輝度  ┃ 6 色指標1の青色値 ┣━━━━━━━━┫ :        : (残りの色の分続ける) 受け取った各画素値は、この配色表に基づいて、表示装置で利用可能な色の うち最近似の色によって表示されます。各原色は、無(0)から最濃(255)までの 分数的な輝度によって表されます。白色は、(255,255,255)と表され、黒色は、 (0,0,0)と表されます、そして、ミディアム・イエローは、(180,180,0)と表さ れます。表示装置が、各原色に8ビット未満しかサポートしていない場合は、 各原色の上位ビットを表示に使用します。各原色に8ビット未満しかサポート しないハードウェアを用いて GIFの配色表の登録をする際は、ハードウェアの 原色の値は下記の計算によって、8ビット形式に変換するものとします。 <配色表の値> = <原色の値>*255/(2** -1) これは、すべての表示装置に対して正しい色の変換を保証します。カラーパ レット機能のないハードウェアから GIF画像を作成する場合、そのハードウェ アで表示可能な色を基にした、固定されたパレットが作成されます。広域配色 表が示されない場合、省略時の配色表を内部的に生成します。そして、現れ得 る各色指標を、 を法(modulo)として同じになるハードウェア色指標に割り 当てます。ここで は、ハードウェアで利用可能な色の個数です。 【 訳注:この場合のを法として同じとは、GIFの色指標をで割った剰余 「0〜(n-1)」をハードウェア色指標にするということです。 】 日本語訳GIF87a仕様書 - 4 - ■ 画像記述部 (IMAGE DESCRIPTOR) 画像記述部は、画面記述部で定義された空間内における、後続の画像の実際 の位置と範囲を定義します。また、狭域配色表の存在を示すフラグと、画素の 表示順序を示すフラグも定義されます。各画像記述部は、画像分離符号(image separator character)によって先導されます。画像分離の役割は、単純に、画 像記述部を先導するための同期符号を供給することです。これは、GIFファイル が、二つ以上の画像を含む場合に有用です。この符号は、16進数で 0x2C すな わち ','(コンマ)と定義されています。画像間でこの符号に出会った場合、画 像記述部が直後に続きます。 前の画像の終了と画像分離符号の間に出会う全ての符号は、無視するものと します。これは、将来、より新しい画像フォーマットによってもたらされる、 GIF の向上を保証し、しかも、旧来のソフトウェア復号器によって安全に無視 されることをも保証します。 ビット バイト 7 6 5 4 3 2 1 0 番号 +---------------+ |0 0 1 0 1 1 0 0| 1 ',' - 画像分離符号(Image separator character) +---------------+ | 画像左端位置 | 2 +- -+ 画面の左端からの画素単位での画像開始位置 | (Image Left) | 3 (LSBが最初) +---------------+ | 画像上端位置 | 4 +- -+ 画面の上端からの画素単位での画像開始位置 | (Image Top) | 5 (LSBが最初) +---------------+ | 画像幅 | 6 +- -+ 画素単位での画像の幅 (LSBが最初) | (Image Width) | 7 +---------------+ | 画像高さ | 8 画素単位での画像の高さ (LSBが最初) +- -+ |(Image Height) | 9 +-+-+-+-+-+-----+ |M|I|0|0|0|pixel| 10 M=0 - 広域配色表を使用。'pixel'は無視。 +-+-+-+-+-+-----+ M=1 - 狭域配色表が後続。'pixel'を使用。 I=0 - 画像は、連続した順番に編成されている。 I=1 - 画像は、飛び越し配置に編成されている。 pixel+1 - この画像の画素あたりのビット数。 画像の位置と大きさの指定は、画面記述部で定義した範囲内にしなければな りません。他方、画像は、定義されている画面全体を覆い尽くす必要はありま せん。 ■ 狭域配色表 (LOCAL COLOR MAP) 狭域配色表の有無は随意です、そして、将来の利用のために、ここに定義さ れます。もし、画像記述部の10バイト目の 'M'ビット(訳注:狭域配色表フラグ) が設定されているのならば、一つの配色表がその画像記述部に続きます、そし て、それの後続の画像に対してだけ適用されます。その画像の終了時点で、配 色表は画面記述部の後で定義された配色表に戻ります。画像記述部の10バイト 目の 'pixel'(訳注:狭域配色表の寸法)欄は、狭域配色表が指定された場合に 限り使用される事に注意してください。これは、対象画像の画素のビット数の パラメータを定義するのみならず、後続する配色表の項目数をも決定します。 日本語訳GIF87a仕様書 - 5 - 画像の処理が完了した時点で、画素あたりのビットの値もまた、画面記述部で 指定された値に戻ります。 【訳注:狭域配色表の構造は、広域配色表と同じです。】 ■ ラスタ・データ (RASTER DATA) 実際の画像のフォーマットは、画像を構成する画素の色指標値の連続として 定義されます。画素は、画像の横列(image row)を左から右へと連続的に格納 されます。指定がなければ、各画像の横列は、上端から下端へと連続的に書き 込まれます。飛び越し配置(Interlace) 、すなわち、画像記述部の10バイト目 の 'I'ビット(訳注:飛び越し配置フラグ)が設定されている場合は、画像表示 の横列の順番は、広く間隔をおいた横列によって画像が埋められる、4段階の 処理を経ます。最初の段階は、画像ウィンドウの一番上の横列から開始して、 各8番目毎の横列を描きます。第二番目の段階は、一番上から5番目の横列か ら開始して、各8番目毎の横列を描きます。第三番目の段階は、一番上から3 番目の横列から開始して、各4番目毎の横列を描きます。第四番目の段階は、 一番上から2番目の横列から開始して、一つ置きに残った横列を描いて、画像 が完成します。この過程を図説すると、次の様になります。 画像 横列 第一段階 第二段階 第三段階 第四段階 結果 --------------------------------------------------- 0 **1a** **1a** 1 **4a** **4a** 2 **3a** **3a** 3 **4b** **4b** 4 **2a** **2a** 5 **4c** **4c** 6 **3b** **3b** 7 **4d** **4d** 8 **1b** **1b** 9 **4e** **4e** 10 **3c** **3c** 11 **4f** **4f** 12 **2b** **2b** . . . 画像の画素値は、現在の配色表に写像される色指標の連続として処理されま す。配色表から得られた結果の色値が、実際に表示される色となります。この 画素の指標の連続(その個数は、画素単位の、画像幅×画像高さ、に等しい) は、一画素につき一値として GIF画像データ・ストリームに引き渡され、付録 Cで定義される LZW圧縮アルゴリズムの翻案によって圧縮と梱包がなされます。 ■ GIF終了部 (GIF TERMINATOR) GIF復号器は、一つの画像を処理し終わった後に、16進数で 0x3B すなわち ';' 符号を発見した場合は、GIFモードの終了処理を行います。これにより、 GIF画像ファイル終了の同期を規定します。慣習として、復号ソフトウェアは、 一時停止して利用者の続ける用意の出来た事を示す行動を待ちます。これは、 キーボードからのキャリッジ・リターン入力、または、マウス・クリックにな るでしょう。対話型のアプリケーションは、この利用者の行動を一つのキャリッ ジ・リターン符号として、ホストに受け渡します。これによって、ホスト・ア プリケーションは、続行できます。次いで、復号ソフトウェアは、典型的には、 グラフィックス・モードを離れてから、以前の何らかの処理を再開します。 日本語訳GIF87a仕様書 - 6 - ■ GIF拡張ブロック (GIF EXTENSION BLOCKS) GIF定義の秩序だった拡張を規定するため、GIFデータ・ストリームの中にお ける拡張の包み込みを定義する仕組みが必要です。明確なGIF拡張は、秩序だっ た向上方針を維持するため、CompuServeによって、定義され文書化される予定 です。 GIF拡張ブロックは、圧縮されはしませんが、ラスタ・データによって使用 される作法に類似した方法で、包み込まれます。基本的な構造は、以下のよう になります。              バイト     76543210 番号    ┌────────┐    │00100001│ 1   '!' - GIF拡張ブロック導入符    ├────────┤       (GIF Extension Block Introducer)    │ 機能コード  │ 2   拡張機能コード (0〜255)    ├────────┤ ──┐  (Extension function code)    │ バイト計数  │   │    ├────────┤   │    :  機能    :   ├─ 必要な回数だけ繰り返す。    │  データ   │   │    :  バイト   :   │    └────────┘ ──┘     …      …    ┌────────┐    │00000000│ ゼロ・バイト計数(ブロックを終了する)    └────────┘    (byte count) GIF拡張ブロックは、任意の画像記述部の直前、または、GIF終了部の前に現 われ得ます。 全てのGIF復号器は、GIF拡張ブロックの存在を認識できなければなりません、 そして、その機能コードを処理できないのであれば、読み飛ばします。これに より、旧来の復号器が機能追加せずとも、将来の拡張された GIF画像ファイル を処理できる事を保証します。 ■ 付録A.用語解説 用語解説 画素 (Pixel) - グラフィックス画像の最小の映像要素。これは通常グラフィッ クス画面上の単一の点に相当する。画像解像度(image resolution)は、典型 的には、画素の単位で与えらる。例えば、かなり標準的なグラフィックス画 面のフォーマットは、320画素×200画素(横×縦)である。各画素は、グラ フィックス・ハードウェアの能力に依存した幾つかの色から一色を表示する ことができる。 ラスタ (Raster) - 画像の一つの列を表現する、画素の水平方向の並び。画像を 操作する典型的な方法、なぜなら、ほとんどのハードウェアは、この作法で 最も効果的に働くように追求されている。 LSB - 最下位バイト(Least Significant Byte)。2バイトの数値において、その 値の下位のバイトが、上位のバイトに先行するという慣習に留意せよ。この 慣習は、多くのマイクロコンピュータで典型的である。 日本語訳GIF87a仕様書 - 7 - 配色表 (Color Map) - GIF画像中で使用される各々の色の定義の一覧。これらの 望まれた色は、(画像から)もたらされた色指標から(ハードウェアの)出力色 指標へ割り当てられることによって生じる表を通じて、利用可能な色に変換 される。 GIF画像中での配色表の定義は詳細ではあるが、出力の画素色は使 用されるハードウェアと定義された色をそれに一致させる能力に強く依存し ている。 飛び越し配置 (Interlace) - 複数の段階によってGIF画像を表示する方法。即ち、 間隔をおいてラスタ・ラインを出力することによって、全てのデータが処理 される以前に画像全体の概容を視覚化するための方法を提供する。 Bプロトコル (B Protocol) - CompuServeが開発したパブリック・ドメインとし て利用可能な誤り訂正ファイル伝送プロトコルであり、CompuServe VIDTEX 製品に実装されている。この誤り検査の仕組みは、対話型アプリケーション におけるGIF画像の伝送に利用される。 LZW - Lempel-Ziv と Welch によってなされた成果に基づく高性能のデータ圧縮 アルゴリズムであり、非常に効率的なワン・パスの符号化と復号化の特徴を 有する。つまり、画像の伸長と表示を同時に行うことが出来る。この技法の 翻案の元となった記事は、下記である。 Terry A. Welch, "A Technique for High Performance Data Compression", IEEE Computer, vol 17 no 6 (June 1984) この基本的なアルゴリズムは、パブリック・ドメインの ARCファイル圧縮 ユーティリティにも使用されている。GIFにおけるLZWのCompuServe翻案は、 付録Cに記述されている。【訳注: LZWは、米国Unisys社の特許です。】 ■ 付録B.対話シーケンス (INTERACTIVE SEQUENCES) 対話環境におけるGIFシーケンス交換 下記のシーケンスは、双方向通信線を通した GIF送信側と GIF受信側間の取り 次ぎ制御用に定義されています。これらのシーケンスは、静的な GIFファイルの ダウンロードを呼び出すアプリケーションには適用されません、また、GIFファ イルの一部分とは見なされません。 GIF能力問い合わせ (GIF CAPABILITIES ENQUIRY)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 『GIF能力問い合わせ(GCE)』シーケンスは、ホストから発行され、対話型GIF 復号器に対して、その復号器のグラフィックス・パラメータを定義する応答メッ セージの返答を要求します。これにより、利用可能な画面サイズ、対応する色の ビット数、対応する同時発色数に関する情報の返答を求めます。『 GIF能力問い 合わせ』のエスケープ・シーケンスは、次のように定義されます。 ESC [ > 0 g (g は小文字です、挿入された空白は読み易くするためです) (0x1B 0x5B 0x3E 0x30 0x67) GIF能力応答 (GIF CAPABILITIES RESPONSE)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 『GIF能力応答』メッセージは、対話型GIF復号器によって返答され、復号器ソ フトウェアが対応している全てのグラフィックス・モードの表示能力を定義しま す(注:モニタ画面のみでなくグラフィックス・プリンタも含めることが可能で す)。下記は、このメッセージの一般的な形式です。 日本語訳GIF87a仕様書 - 8 - #version;protocol{;dev, width, height, color-bits, color-res}... '#' GIF能力応答識別文字(番号記号)。 version GIFフォーマットのバージョン番号。最初は '87a'。 protocol='0' 復号器は、エンド・ツー・エンド(end-to-end)プロトコルに対応 していないので、直接8ビットのデータ・ストリームとして伝送 する。 protocol='1' ホストから直接表示装置へ GIFデータを対話的に伝送するために 誤り訂正プロトコルが使用出来る。 dev = '0' 画面パラメータ集合が続く。 dev = '1' プリンタ・パラメータ集合が続く。 width 対応する画素単位での最大表示幅。 height 対応する画素単位での最大表示高さ。 color-bits 対応する1画素のビット数。対応する色数は、2のcolor-bits乗。 color-res 対応するハードウェアのカラー・パレットの色要素あたりのビッ ト数。color-res が、'0' ならば、ハードウェア・パレット・テー ブルは、利用出来ない。 注: 『GIF能力応答』メッセージにおける全ての値は、ASCII十進数として返答 します。メッセージは、キャリッジ・リターン文字で終了します。 下記の『GIF能力応答』メッセージは、プリンタなし IBM PC の EGA (Enhanced Graphics Adapter)の三つの標準構成を記述しています。また、GIFデータ・スト リームは、誤り訂正プロトコルで処理できるとしています。 #87a;1 ;0,320,200,4,0 ;0,640,200,2,2 ;0,640,350,4,2 【訳注:GIF89aによると、';' の前の空白は必要ありません】 GIFグラフィックス・モードを登録 (ENTER GIF GRAPHICS MODE)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 現在、対話型 GIF復号器に動作を起こさせる二つのシーケンスが定義されてい ます。これらの間の違いは、選択される出力媒体の違いだけです。それらのシー ケンスは、下記のようになっています。 ESC [ > 1 g GIF画像を画面に表示する。 (0x1B 0x5B 0x3E 0x31 0x67) ESC [ > 2 g 画像を接続されたグラフィックス・プリンタに直接表示する。 随意で、画像を画面上に表示しても構いません。 (0x1B 0x5B 0x3E 0x32 0x67) 注: 各シーケンスの終了文字 'g' は、小文字にしてください。 対話型の環境 (INTERACTIVE ENVIRONMENT)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 対話型アプリケーションに仮定される GIF画像データの伝送環境は、ホストか ら端末まで完全な8ビットのデータ・ストリームです。全ての 256文字の符号が 伝送可能でなければなりません。通信の8ビット・データ経路の確立は、通常、 ホスト・アプリケーション・プログラムによって処理されます。とはいえ、その 経路は、GIFを扱える受信側の通信プログラムまでです。受信側通信プログラムは、 256個全ての8ビット符号を受信して、GIF復号器ソフトウェアに引き渡します。 日本語訳GIF87a仕様書 - 9 - ■ 付録C.画像の梱包と圧縮 (IMAGE PACKAGING & COMPRESSION) 実際の出力画像を表現するラスタ・データ・ストリームは、下記のように表せ ます。       76543210     ┌──────────┐     │   符号寸法   │     ├──────────┤ ──┐     │ブロック・バイト計数│   │     ├──────────┤   │     :          :   ├─ 必要な回数だけ繰り返す。     │ データ・バイト  │   │     :          :   │     └──────────┘ ──┘       …      …     ┌──────────┐     │ 00000000 │ 零のバイト計数(byte count)     └──────────┘  (データ・ストリームを終了する) 画素値の連続から、伝送または格納されるキャラクタ・ストリームへの画像の 変換は、幾つかの段階を経ます。要約すると、それらの段階は下記のようになり ます。 1.符号寸法(code size)を定める 実際のデータを表現するのに必要なビット数を定義する。 2.データを圧縮する 画像の画素の連続を圧縮符号の連続に圧縮する。 3.バイトの連続を作成する 圧縮符号の集合から、8ビット長のバイトの列に変換する。 4.バイトを梱包する バイトの集合をブロックに梱包して、ブロック中のキャラクタの計数を前に 付加して出力する。 符号寸法を定める  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ GIFラスタ・データ・ストリームの最初のバイトは、実際の画素値の集合を表 現するのに必要な最小のビット数を指示する値です。通常、これは色のビット数 と同じになります。但し、いくつかのアルゴリズム上の束縛により、色のビット 数が1である白黒画像は、2の符号寸法を持つように指示しなければなりません。 この符号寸法値は、圧縮符号が1ビット長いものから開始しなければならない事 をも示唆しています。 圧縮  ̄ ̄ LZWアルゴリズムは、データ値の連なりを符号の連なりに変換します。この符 号は、値そのもの、あるいは、値の連なりを指示している符号です。テキスト文 字を使って類推すると、出力符号は、文字、あるいは、文字列を象徴する符号か らなるということです。 日本語訳GIF87a仕様書 - 10 - GIF で使用される LZWアルゴリズムは、下記の違いを除いて標準の LZWアルゴ リズムとアルゴリズム的には一致します。 1.すべての圧縮・伸長のパラメータと表を開始時の状態にリセットする特別な クリア符号(Clear code)が定義されています。この符号の値は、2の『符号寸 法』乗です。例えば、符号寸法が 4(1画素あたり4ビットの画像)に設定さ れている場合、クリア符号値は、16(二進数で 10000)になります。クリア符 号は、画像データ・ストリーム中のいかなる時点でも出現できます。これによっ て、LZW アルゴリズムは、後続の符号を新規のデータ・ストリームが開始した かのように処理するよう要求されます。符号器は、各画像データ・ストリーム の最初の符号としてクリア符号を出力すべきです。 2.画像データ・ストリームの終了を明示的に指定する情報終了符号 (End of Information code) が定義されています。この符号に遭遇した時に、LZW 処理 は終了します。符号器は、一画像の最後の符号として、これを出力しなければ なりません。この符号の値は、『クリア符号』+1です。 3.最初の利用可能な圧縮符号値は、『クリア符号』+2です。 4.可変長の出力符号は、一符号あたり『符号寸法』+1ビットから開始して、 12ビット長までです。これにより最大符号値は 4095(0xFFF)と定義されます。 LZW 符号が現在の符号長を超えたるたびに、符号長は、1増加されます。これ らの符号のパックあるいはアンパックは、新しい符号長を反映させて適合させ ねばなりません。 8ビットのバイトを作成する  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ GIF の LZW圧縮は、3から12ビット間の可変長符号の連なりを作り出すので、 これらの符号を実際に格納あるいは伝送されるキャラクタとなる8ビットのバイ トの連なりに再編成しなければならなりません。これは、付加的な画像の圧縮を もたらします。諸符号は、あたかも右から左にパックされたビットのストリーム として編成され、出力の際に8ビットづつもぎ取られます。 1キャラクタあたり8ビットのキャラクタ配列を想定し、パックされるものに 5ビット符号を使用するものとすると、配置例は次のようになります。     バイトn バイト5 バイト4 バイト3 バイト2 バイト1   ┌‥‥‥‥‥┬────┬────┬────┬────┬────┐   │この先同様│hhhhhggg│ggfffffe│eeeedddd│dcccccbb│bbbaaaaa│   └‥‥‥‥‥┴────┴────┴────┴────┴────┘ 注: 物理的なパックの配置は、圧縮符号のビット数が変わるにともなって変 わりますが、概念は同様のままです。 バイトを梱包する  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ひとたびバイトが作り出されると、それらは出力のためキャラクタ計数(character count)バイトを前に付けた、各々0〜255 バイトのブロックに分割されます。キャ ラクタ計数が0のブロックは、与えられた画像のラスタ・データ・ストリームを 終了させます。これらのブロックが、実際に出力される GIF画像です。このブロッ ク・フォーマットは、復号プログラムに対して、必要ならば、ブロック計数を読 んでデータを読み飛ばすことにより、通り過ぎてしまった実際の画像データを読 み取る能力をもたらすという副作用があります。 日本語訳GIF87a仕様書 - 11 - ■ 付録D.多重画像処理 (MULTIPLE IMAGE PROCESSING) GIFデータ・ストリームは、複数の画像を含むことができるので、義務づけら れた、そのようなファイルの処理と表示について記述します。画像記述部は、論 理画面中における画像の配置を可能としているので、画面の一部分となるであろ う画像の連続を定義することができます、そして、全体として全画面を覆い尽く せます。以下に、多重画像状態の取り扱いの指針を示します。 1. 画像間で一時停止しません。各々、復号器によって認識されたその場で処 理されます。 2. 各画像は、画面ウィンドウ中の画面上にある既存のいかなる画像をも躊躇 なく上書きします。画面が消去されるのは、 GIF画像処理の開始と終了時 のみです。 GIF終了部の記述をご覧ください。 日本語訳GIF87a仕様書 - 12 -