プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

【Gimp】Pythonによるプラグイン開発

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ではプラグインブラウザは、『ヘルプ』→『プラグインブラウザ』から起動します。

(参考にしたサイト)

ITProの解説記事

Gimp PythonのAPIについての説明

 

別のプラグインのサンプルについて

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を指定する方法で書いた場合は下記のようになります。

register関数のサンプル

 

プラグイン作成時の注意点

今回PythonでGimpのプラグインを作成する際に気づいた点をまとめておきます。

  • Linuxの場合、プラグインのスクリプトに実行権限を与えておく必要があります
  • コメント等に日本語を使う場合も、2行目に、 # -*- coding: utf-8 -*- の記述が必要です(コードの指定がないと、日本語部分で非asciiキャラクターとなり、Syntax errorが起きます)
  • gimpfuモジュールによる開発は、手軽にプラグインを開発するのには最適です。しかし、run_modeにより異なる処理をするには向いていません(内部で自動でrun_modeを処理するため)。run_modeも含めて処理を記述したい場合は、gimppluginモジュールを使うとよいと思います。なお、この場合は、import gimpplugin; import gimp のように宣言する必要があります。