Google App EngineでのGIFの続き その3

白黒なんかの1ビット画像のGIFでコケるのを、結局修正することにした。
仕様書によると1bitカラーの時は2bitカラーとして強引にエンコードするらしい。
つまりカラーパレットの長さが2のときに4に拡張して、それに呼応してclearcodeなども動かすと。
で、クイックハックしたら、まぁ上手く行ってるみたい。
関数lzw_decodeの中で処理。patchとしては当たらないかも。

--- pygif.py
+++ pygif.py
@@ -307,8 +307,12 @@
         clearcode, end_of_info = color_table_size, color_table_size + 1
         bits = string_to_bits(input)

+        if color_table_size == 2: #1bit color
+            clearcode = 4
+            end_of_info = 5
+

そもそも、GIFと言えば8bitカラーということで世界は大まかに動いているらしく、1bitカラーに関しては甘くなるのね。

まぁ、これでいいかとりあえず。
上流に投げたいけど、やっぱり英語の壁が・・・。

あと、もう一箇所、イレギュラーなデータの処理でコケるんだよなぁ。