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

chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

ドット絵エディタEDGEのファイルをGIMPで開くためのプラグイン書いた

GIMP Python

今までドット絵描くのにEDGEを使ってたわけなんだけど、ふとGIMPに移行しようとか思ったらどうしよう*1、とかよくわかんない心配をしたりして。
そうしたらEDGE形式用のC++ライブラリがあるじゃないですか。しかもソースコード公開されてるときた*2

そこでふと

GIMPってPythonプラグイン書けたよな…?

って思ってしまったんですよ。で、やや苦労しつつも四日くらいでできた。
長ぇ( ゚д゚)って思ったので続きを読むからで。


EDGE形式ファイルをGIMPで開くためのGIMPプラグイン (Python-fu)

仕様
  • 透過色は背景色と同じもしくは近いパレットが設定されます
  • レイヤーはちゃんと維持しますよ
  • インデックスカラーのみ対応
苦労したこと
  • Python-fuのドキュメントどこだー。
  • サンプルコードないんですか
    • 付属のプラグインで画像入出力関係かつPython実装なのは file-openraster.py しかなかった。
  • デバッグしづらい。ちょうしづらい。みんなどうしてんのってレベルでやべぇ。具体的には
    • 標準出力・エラー出力がNULLに繋がってんのか知らんが、--verboseオプションでコンソールつけても出てこねぇ
    • 仕方ないのでファイルを開いてそこに書く。自前ログファイル。
    • pdb (Procedural Database Procedures) とかいうところにある関数使わないとすっごいやりにくい (colormapの取得とか)
    • が、pdbのリファレンスあるんですか。ないんですか。
      • Python-fuのコンソール開いて、dir(pdb) で関数探して、それの proc_help とか眺める作業を結構やった
  • 真面目にset_pixelをしまくるとべらぼうに遅いので、ちゃんと無視するところは無視しましょう
    • EDGEの場合だと透過色扱いのやつ。layer.fill(TRANSPARENT_FILL) で埋めて透明じゃないところ以外を layer.set_pixel しないと10数秒かかることになる
  • ただ透過してる部分がパレットの変なところにマッピングされてることがあってめんどい
    • プラグインの実装だと、透明度が0 (完全透明) のやつは強制的に透過色のインデックスに変更してる

*1:レイヤーを維持したまま別のファイル形式に移行、ということを考えるといったんGIMP形式にした方がよさそうじゃないですかー、っていう発想

*2:Susieプラグインがあるのは知ってた