8bitカラーのBMP画像のカラーパレット操作(python PIL)。

某お仕事で、今後必要になるであろう。
前回↓
photoshop:減色処理をバッチとjavascriptで実現。 - redtaxi d-side
の延長のお話。


今回は、8bitカラー(インデックスカラー)のbmp画像のカラーパレットを編集したいというお話。
特に、透過指定色に使われているある色をカラーパレット内にて移動(最初に持ってくる)する。

まず、pythonで画像いぢくるとなるとコイツ↓PIL
Python Imaging Library (PIL)


基本の使い方。

import Image
import ImagePalette

#まずは対象ファイルオープン
img = Image.open("D:\work\xxx\xxx.bmp")
#表示(必要ないけど・・・)
img.show()

#カラーパレット取得
palette = img.getpalette()   #RGB値のリストで返ってきます。
#ここからこのリストの順番やRGB値をいぢって。。。
#戻す!
img.putpalette(np)

#このままだと、実際のデータのカラー指定がズレてるので、
#パレットの移動にあわせて、実データもずらす。
#まずは、データの取得。
data = list(img.getdata())  #リストで指定パレット番号が返る。
#指定パレット番号をいぢって戻す!
img.putdata(data)
#保存
img.save("D:\work\xxx\xxx.bmp")


このあたり↓が参考になりました。感謝。
PILでGBA with Python - 神様なんて信じない僕らのために