GIF と LZW 圧縮と GifWriter.js
- 1. GIF と LZW 圧縮と
GifWriter.js
id:nobuoka
(@nobuoka)
2013-05-23 Kyoto.js #8
- 21. 1 1 1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
辞書には初期状態で長さ 1 のすべての生の符号列が
含まれる (圧縮後の符号値と生の符号値が同一)
圧縮後 生符号列
0 0
1 1
2 2
3 3
辞書
{ 0, 1, 2, 3 } の 4 つの符号からなる符号列の LZW 圧縮の例
- 22. 1 1 1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
まずは最初の符号を取り出す
圧縮後 生符号列
0 0
1 1
2 2
3 3
辞書
- 23. 1
1 1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 は既に辞書に入っているので次の符号の取り出しへ
圧縮後 生符号列
0 0
1 1
2 2
3 3
辞書
- 24. 1 1
1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 1 は辞書にないので辞書に追加して、辞書にある部分
だけ (最後の符号を除いた前の部分) を書きだし
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
辞書
- 25. 1
1
1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
次の符号を取り出す
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
辞書
- 26. 1
1 1
0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 1 は辞書にあるので、次の符号の取り出しへ
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
辞書
- 27. 1
1 1 0
2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 1 0 は辞書にないので辞書に追加し、辞書に存在
する部分だけを書きだす
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
5 1 1 0
辞書
- 28. 1 4
0
2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
5 1 1 0
辞書
という操作を繰り返す