前回の対談形式を書いてみて、人には向き不向きがあることが良くわかりました。というか、ちよ&大阪がそもそもの間違い、親方&艦長&指令でやるほうが良いですね。
そんなわけで、仕切りなおして自分のスタイルで普通に書き直します。
| GIF | 特徴 |
|
| 利点 |
|
|
| 欠点 |
|
|
| JPG | 特徴 |
|
| 利点 |
|
|
| 欠点 |
|
|
| PNG | 特徴 |
|
| 利点 |
|
|
| 欠点 |
|
|
| BMP | 特徴 |
|
あとは、TFFだとか色々ありますが、めどいので無視します。
少し脱線しますが、PC98時代の草の根BBSではMAGフォーマットが標準でした。16色しか使えない環境で、自然な色合いに見せる為には、タイリング(ディザ)が不可欠で、結果、圧縮形式もそれに特化された物が重用されたのです。しかし時代は変わっていきWin3.1の頃にはBMPやJPG形式も出回り始めました。
2.4Kの通信速度やDOS環境では、BMPはうざかったです。この時代のことで良く覚えているのは、初めてのJPGデータが、「ごとP」さんの描かれた「キィ・ザ・メタルアイドル」のイラストだったということです。この絵はお気に入りで、仕事で使っていたWim3.1の壁紙にもなっていました。テラなつかしス。
まず結論から言いますと、圧縮率の向上、すなわちファイルサイズの削減に有効な手法は
となります。この辺の実戦はコラ講座で行います。
そして、これから描くことはまったく不要な知識ですので読まなくてもまったく問題ありません。
むしろ詠まないほうがいいと思います(笑
でも背景の共通化は読んで欲しいかな?かな?
さて、語る上で説明しなければいけない事が2つあります。
1は、実はもともとの画像というものは320*240の画像であれば、320の長さのデータが240並んでいるということですが、データ上では一本の線で並んでいます。ですので左端と次の行の右端はくっついていると思ってください。

この絵でなんとなくイメージを持ってもらえれば、幸いです。
このことから、データを弄くって640*120のように書き換えれば妖しげな絵になります。
2ですが、一般的にGIFは同じ色が続くと高圧縮といわれますが、これはかなり単純化された説明でもう少し話は複雑です。しかしまずはこの単純化された説明からしていきます。
しかしGIFに関する圧縮技法は語り尽くされたものであり、理論的なものを必要とする方はググッてください。
先ほど出した双の画像で説明すると、上三行のデータをRとBで現すと、
RRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRBBRRRRRRRBBRRRR
これを数えていくと、Rが57個、Bが2個、Rが7個、Bが2個、Rが4個となります。このときRを”0”、Bを”1”とすると 00 57 01 02 00
07 01 02 00 04 となります。これでRとBの72個のデータが、10個に減りました。
これが一般的にランレングス法といわれる、圧縮方法です。 しかし、実際の話し、この手法は使われていません(どっか〜ん
それは何故か?この圧縮方法では市松模様といわれる画像ではデータが倍になります。市松模様とは、左の画像です。

理屈上この模様では2倍のサイズになりますが、GIFではコンパクトに圧縮されています。
実際Gifのようにカラーの少ない形式では、右の絵のようにディザが多用される傾向があるので、これではまずいわけです。
ではこの市松模様を、効率よく圧縮するにはどうすればいいのでしょうか?
単純化した例題であれば、循環小数の考え方と変わりません。例えば1を7で割ると0.142857142857・・・・のように、142857が繰り返されます。
この考え方を市松模様に応用してみると、白=1、黒=0とした場合、1・0の繰り返しとなります。
しかし、既に述べたように、画像はデータで見ると、左端と、次の行の右端がつながります。
つまりこの絵では 101010101010101010101010 010101010101010101010101 の繰り返しとなり、2種類のパターンで再現されていることが分かります。これにたいして変数のようなもので置き換える(符号化)と
A=101010101010101010101010
B=010101010101010101010101
のようになります。つまり例に出した市松模様の場合は"ABABABABABAB"と圧縮できるわけです。
参考までに横を24から23に変えると、データ上では10だけの単純な繰り返しとなりより高圧縮が期待出来ます。まれに画像の横サイズを1ドット変えるだけでサイズが大幅に変わる事がありますが、このような条件が考えられるわけです。
同じパターンやべた塗りが多ければ多いほど圧縮率が上がることは説明しました。
そして減色ですが、これは同じ色の連続を増やす可能性があるため、結果として圧縮率が上がります。
これは■ ■のように、人の目では分からないぐらいの色の違いでも、当然ながらデータ上ではまったく別のものとして扱われています。
この2色が市松模様になっているような場合、1色で塗っても見た目上問題がなくなおかつデータが、より圧縮できるようになります。それこそが減色の効果です。
まず例を見てみましょう。つぎのURLを開いてください(ブリーフケース)
このURLで背景修正無しを見てください。一見同じ背景ですが微妙に違っており共通化が行えません。そのため938Kもサイズがあります。しかし、背景を共通化したデータは577Kまで減りました。同じサイズ、同じ画質ですがここまで変わります。もう少しがんばれば双葉にアップできるサイズにまで減らせられます。これが背景の共通化です。
次の画像を見てください。

2段それそれで上下に分かれています。これが何を表しているかというと背景の共通化が行われているかどうかで、どの程度データが減るか?という図です。
上段は、上がアニメーションGIFで全てのコマが1枚絵の場合で、下が背景を共通化しているものです。そして下段はそれを並べてどれぐらい画像が減ったかを表現しています。
つまり背景が統一できればできるほどデータは小さくなります。
さて、これを実現する上で必要なのは「全てのコマで同じ場所が同じ色であること」です。
これは、例えば地上波をキャプチャーした場合、ノイズもありますし、コマ数が増えれば増えるほど共通化は不可能になります。また背景が動く映像でも共通化は難しくなります。そういう素材の場合は切抜きを行うのが一番です。