しらぎくGIF画像合成スクリプトの動作。

ここでは、しらぎくGIF画像合成スクリプトの実際の動作について解説します。

しらぎくGIF画像合成スクリプトの基本的な動作。

しらぎくGIF画像合成スクリプトでは、具体的に以下のようにして処理して行きます。

  1. 各GIF画像から必要なデータ等を抽出する
  2. 抽出したデータを連結する

ここで注意したいのは、一連の処理において、GIF画像データの解凍や再圧縮を一切行っていないと言う事です。

代りにアニメーションGIFの原理を用いて一画像データに複数画像のデータを封入して一気に纏めて表示させる事で画像を合成していると言う訳です。

以下、各処理について具体的に解説しておきます。

1. 各GIF画像から必要なデータ等を抽出する。

具体的には以下のデータのみが必要となります。

パレットデータ。
  1. まず、共通パレットがあれば取得します。
  2. 続いて、個別データの取得時に個別パレットがあれば、パレットデータを上書きします。
パレットの色数ビット数。

これも共通パレットがあればそのデータをまず取り、個別データにパレットがある場合はそれで上書きする形になります。

画像の大きさ。

これは個別データのサイズとなります。

但し、ベースとなる画像に関しては、共通データのサイズとします。

尚、貼り付けるGIF画像がベース画像をはみ出してしまう場合、ベース画像の大きさはその都度拡げられます。

画像の表示位置。

個別データにある表示位置です。

インタレースの有無。

これを取得しておかないと、正常な表示が出来ません。

個別データ内にフラグがあるので、それを取得しておきます。

透過の有無と透過扱いのパレット番号。

特に貼り付けるGIF画像の透過属性を切り捨ててしまうと見っともない仕上がりになってしまいます。

個別データの前にあるコントロールブロックから取得します。

画像の圧縮データ。

LZW圧縮されたデータですが、このスクリプトでは展開処理などは一切行いません。

画像データのブロックをそのまま取得します。

尚、アニメーションGIFを読み込んだ場合は、第一コマのみをデータとして取得し、アニメーション関連の属性はすべて破棄されます。

2. 抽出したデータを連結する。

抽出したデータは、ベース画像から順番に新たなGIFデータとして連結されて行きます。

具体的には以下のようになります。

1. GIFヘッダ

アニメーションGIFを実現するため、GIF89a規格に準拠します。

2. 共通画像情報ブロック

以下のようになります。

3. ネットスケープ拡張ブロック
この項目は全面的に削除しました。(平成18年 1月 5日)
4. 各画像のデータ。

まずコントロールブロックで透過属性と遅延時間を指定します。

このあとに個別パレットデータを付けた画像情報ブロックを続けます。

5. 終了ブロック

全ての画像データを連結した後に付けます。

蛇足。

MNG動画が普及していれば、上記とほぼ同様の発想でJPEG/PNG画像専用の合成スクリプトが作れるのですが、あいにくMNG動画は全く普及していないので、作る予定はございません。


ページ外へのご案内。