読者です 読者をやめる 読者になる 読者になる

Flat Leon Works

アプリやゲームを作ってます。

Pillow(Python画像処理ライブラリ)でRGBAパレット形式のTGAファイルを保存する

Python 技術

PillowPythonの画像処理ライブラリです。PillowはTGAファイルに対応しているのですが、RGBAパレット形式のTGAファイルの保存ができなかったのでソースコードをいじって対応させてみました。

ちなみにRGB形式のパレットには最初から対応されていました。

注意事項

  • 確認したPillowのバージョンは'2.8.2'です。ただし、最新のリポジトリでもRGBAのパレットには対応してないようです。
  • 保存しか試していません。(読み込みは試していません)
  • ソースコードいじるのは自己責任でお願いします。
  • RGBAパレット形式のTGAファイルを正しく表示できるビューワーはあまりないようです。いくつかの画像ソフトで試してみましたが全部正しく表示されませんでした。TGAのフォーマット的にはRGBAのパレットは許可されていたと思うのですが…。

いじるファイルは以下のファイルだけです。ファイルの場所は、OSや環境によって変わると思います。私の環境(Mac)では以下の場所にありました。

/usr/local/lib/python2.7/site-packages/PIL/TgaImagePlugin.py

変更箇所

変更は_saveメソッド内の2箇所だけです。

160行目あたり :

        colormapfirst, colormaplength, colormapentry = 0, 256, 24

の次の行に以下のコードを追加

        if im.im.getpalettemode() == 'RGBA':
            colormapentry = 32

186(188)行目あたり :

    if colormaptype:
        fp.write(im.im.getpalette("RGB", "BGR"))

を以下のコードに差し替え

    if colormaptype:
        if colormapentry == 32:
            fp.write(im.im.getpalette("RGBA", "BGRA"))
        else:
            fp.write(im.im.getpalette("RGB", "BGR"))

変更後の_saveメソッドです。これをコピーして差し替えるのが楽かもしれません。

おまけ : Pillowを使ったPNGからTGA(パレット形式)への変換

from PIL import Image
Image.open( 'hoge.png' ).convert( 'P' ).save( 'hoge.tga' )