PythonによるGimp用のプラグイン開発について調べたので、以下にまとめておきます。
なお、使用したOS, Gimpのバージョンは以下のとおりです。
- OS : Ubuntu 9.04 Desktop 日本語 Remix版
- Gimp : 2.6.6
- その他関連するライブラリ:PYGtk,PyCairo,PyGobjectが必要です(Ubuntuの場合、OSインストール時に入っていました。Synapticで調べると各ライブラリのバージョンはそれぞれ、2.14.1-1, 1.4.12-1.2, 2.16.1-1です。)
- Python : 2.6.2
なお、Windowsの場合の開発環境については、ITProに解説記事があるので、そちらを参考にされるといいと思います。
プラグインの作り方
(1)IT Proの解説記事のとおり、コーディング・コンパイルします
説明のとおり行なえば、問題なく動作すると思います。
(2)作成したスクリプトを~/.gimp2.6/plug-ins ディレクトリに移動します
サンプルのため個人用のプラグインディレクトリに移しました。システム全体で使う場合は、適切なディレクトリ(たとえば、など)にインストールすればOKです。
(4)Gimpから正常に呼び出せればOKです。
なお、Gimp2.6ではプラグインブラウザは、『ヘルプ』→『プラグインブラウザ』から起動します。
(参考にしたサイト)
別のプラグインのサンプルについて
GimpのPythonのプラグインのサンプルは上記のAPIを説明しているサイトにもあります。こちらもそのまま動かせばOKです。ただし、よく見るとregister関数に与える引数が上記のITProのサンプルとは異 なっています。
ITProのサンプルと比較して異なっている点は、以下のような点があると思います。
- ITProの記事の説明だと7番目の『メニューに表示する名前』にあたる部分に、メニュー中の位置が入っています
- register関数で登録している引数の個数と、プラグイン本体の関数(python_clothify)の引数の個数が一致していません
- キーワード引数menuがない
不思議に思ったので、gimpfu.py(手元の環境では、/usr/lib/gimp/2.0/python/にありました)を調べると、register関数の呼び出し方が異なっている場合、次のような動作をするようです。
- キーワード引数のmenuが指定されない場合
- 7番目の引数(IT Proの記事中だと『メニューに表示する名前』)の内容を解析し、その内容をmenuの内容とします
- 7番目の引数の先頭が、<Image>であった場合は、パラメータリストの先頭に、PF_IMAGE型の引数と、PF_DRAWABLE型の引数を自動的に追加します
このような動作をするため、どちらの引数の与え方でも問題なく動作を行うようです。
ちなみに、このAPI解説ページのサンプルのregister関数をキーワード引数menuを指定する方法で書いた場合は下記のようになります。
プラグイン作成時の注意点
今回PythonでGimpのプラグインを作成する際に気づいた点をまとめておきます。
- Linuxの場合、プラグインのスクリプトに実行権限を与えておく必要があります
- コメント等に日本語を使う場合も、2行目に、 # -*- coding: utf-8 -*- の記述が必要です(コードの指定がないと、日本語部分で非asciiキャラクターとなり、Syntax errorが起きます)
- gimpfuモジュールによる開発は、手軽にプラグインを開発するのには最適です。しかし、run_modeにより異なる処理をするには向いていません(内部で自動でrun_modeを処理するため)。run_modeも含めて処理を記述したい場合は、gimppluginモジュールを使うとよいと思います。なお、この場合は、import gimpplugin; import gimp のように宣言する必要があります。