GIF 形式とは — 256 色パレットと動く画像
GIF 形式の歴史(87a・89a)と 256 色パレット、LZW 可逆圧縮、1 色だけの透過、アニメーションの仕組みとファイル構造、WebP・動画に置き換えるべき場面を解説します。
GIF(Graphics Interchange Format)は、アメリカのオンラインサービス CompuServe が1987年に発表した形式で、1989年の改訂版 GIF89a で透明色とアニメーションに使われる拡張ブロックが追加されました。インターネットの黎明期から使われ、今でも「動く画像」の代名詞として呼ばれていますが、技術的には最も古い部類の形式です。
256 色パレットと LZW 圧縮
GIF はピクセルごとに色を直接保存せず、最大 256 色のパレット(色表)の何番目の色かを保存します。仕様上、色表は 2 のべき乗のサイズで最大 256 項目まで持てます。この番号の並びを LZW アルゴリズムで可逆圧縮します。
圧縮自体は可逆ですが、1,600 万色を超える写真を 256 色に減らす過程で大きな劣化が生じます。空や肌のようななめらかなグラデーションは、点状の模様(ディザリング)や帯状の縞で表現されます。逆に、色数の少ないドット絵や単純な図形は小さく鮮明に保存されます。
LZW アルゴリズムにはかつて特許の問題があり、これが1990年代に PNG が開発されたきっかけのひとつになりました。その特許はすでに期限が切れています。
透過
GIF89a のグラフィック制御拡張(Graphic Control Extension)には、透明色の番号 を 1 つ指定する欄があります。その番号のピクセルは描画されず、背景がそのまま見えます。つまり透過は「完全に透明か、完全に不透明か」のどちらかで、半透明の影やなめらかな輪郭は表現できません。そのため透過 GIF を別の色の背景に置くと、輪郭に白いふち(ハロー)が見えることがよくあります。
アニメーション
GIF アニメーションは複数の画像を順番に表示する方式で、フレーム間の遅延時間は仕様上 1/100 秒単位 で指定します。繰り返し回数は、その後広く使われるようになった拡張ブロック(NETSCAPE2.0)で決めます。
ファイル構造
GIF ファイルは GIF87a または GIF89a という 6 バイトのシグネチャで始まり、続いて次のブロックが並びます。
- 論理画面記述子:キャンバス全体の幅・高さと背景色の番号
- グローバルカラーテーブル:ファイル全体で使うパレット(任意)
- グラフィック制御拡張:次のフレームの遅延時間、透明色の番号、フレームの処理方法(89a)
- イメージ記述子と画像データ:フレームの位置・サイズ、必要ならローカルカラーテーブル、LZW 圧縮データ
- 3〜4 がフレームの数だけ繰り返され、最後に終端バイト(3B)が来ます。
フレームごとにローカルカラーテーブルを持てるため、理論上は全体で 256 色より多くの色を使えますが、1 フレームの中では 256 色の制限がそのまま残ります。
長所と限界
- 互換性:すべてのブラウザとメッセンジャー、ほぼすべてのソフトがアニメーションまで再生します。
- 容量の非効率:フレームごとに 256 色で個別に圧縮するため、写真のような映像を入れるとファイルが非常に大きくなります。Google は、アニメーション WebP が GIF・APNG より小さいサイズを実現できると説明しています。
- 色と透過の制約:256 色、1 ビットの透過しか使えません。
主な用途と代替形式
短いリアクション画像、ローディングアイコン、ドット絵のように、どこでも再生できることが最も重要な 場面では今も使われています。Web サイトに載せる動く画像なら、アニメーション WebP・AVIF や短い動画(MP4・WebM)のほうがはるかに小さく鮮明です。
変換するときの注意点
- GIF → JPG・PNG:ほとんどのツールは最初のフレームだけを静止画として保存します。
- PNG・JPG → GIF:256 色に減るため、写真は画質が大きく落ちます。ロゴや図形でなければおすすめしません。
- 静止画をさまざまな形式に変換する方法は 画像形式の変換 を参照してください。
今すぐ試す