twitter※発信する情報は、個人の見解・意見であり、所属する会社の見解・意見ではありません。plug-in(developer.gimp.org)の1ページ目を勝手に訳してみたものです。間違い甚だしい訳だけどもとりあえず上げてみる。訳す作業は読むだけよりもちゃんと文章を読もうとするから読むだけより内容を理解している気がしないでもない。そんな自分の為の作業の一部というわけで。ちなみに画像は省略してあります、また例のコードも長い物は省略しています。読むときには原文とつきあわせながらの方が良いと思います。他のスクリプト作者に自分で作ったプラグインが使えるようにするための、PDBの使い方も示す。はじめに新しく開発を始める人はたいてい、GIMPのサイズと世間での評判に怖じ気づいてしまう。そのため、プラグインを書くことは難しいことだと考えてしまう。feeling)を解消することである。このパート(1P目)では、プラグインの基本的な事柄を示す。プラグインのインストールの仕方と、画像からデータを取得する方法やそれを直接操作する方法を示す。(PDB)に集中している。GIMPを起動したとき、あらかじめ設定されたスクリプトとプラグインの置き場所を確認しにいく、そして新しいスクリプトが無いかを自分に確認する。このときプラグインは、自分自身をPDBに対して宣言する。メニュー構造か入出力パラメータの中で、求められる位置情報のようなものを送り出す。スクリプトかプラグインが他のプラグインを使いたい時、PDBを通して得る。PDBはユーザが意識しないレベルで一方から、または他方からのパラメータの伝達を管理する。プラグインから操作できる内部関数は、coreでまずまとめられなければならない。coreはPDBでその関数を登録し、次にlibgimpがそれらを通常の関数のように呼ばれるようにする。Worldを作ってみよう。headerと、GIMP関連ユーティリティであるgimptoolが必要である。このユーティリティによって、プラグインを個人のディレクトリ(~/.gimp-2.0/plug-ins)か、システムのデフォルトディレクトリのどちらかにインストールできるようになる。書式は以下の通りである。plugin.cこのユーティリティはオプションによってインストールスクリプトになれば、プラグインをアンインストールするのにも使える。振る舞いGIMPプラグインは通常、3つの異なる振る舞いをする。エッジ検出のように、プラグインは画像データを取得し、それを修正し、そして修正された画像を返すことができる。いくつかのscript-fuやjpeg画像読み込みプラグインといったファイル読み込みプラグインのように、画像を生成して返すこともできる。ファイル保存プラグインのように画像を取得し、対象データを修正することなく処理を行うものもある。<libgimp/gimp.h>このヘッダーは全ての基本的なプラグインの要素を利用可能にしてくれる。run};このstructureはPLUG_IN_INFOという名前を持たなければならない。このstructureは、4つの関数へのポインタを含んでいる、この関数はプラグインの生成と同時に呼び出される。initとquitはオプショナル(あってもなくても良い)である、必要でないときはNULLを与えておけば良い、しかし最後の二つは必ず必要である。init()関数はGIMPが起動したときに呼び出される。この関数は通常使われない。プラグインの中には、init()関数を、コアが行わない補助的な検索をするために使うものもある。init()関数は標準的なGIMPプラグインでは使われていない。役立つこともある、例えば、いくつかのファイルのあるところから条件付でprocedure(手続き)を登録したい場合などに使える。quit()関数はほとんどのプラグインで使われていない。quit()関数は、リソースを解放するためにGIMP終了時に呼び出される。quit()関数はscript-fuプラグインの中で使われている。query()関数は、そのプラグインが初めて現れたとき(インストールされたとき)呼び出される。プラグインが変更されたときも同様に呼び出される。run()関数は、プラグインの中で中心となるものである。run()関数はプラグインが実行するかどうかたずねられたとき呼び出される。()関数は、対話的な方法を始めるかスクリプトによって、その時決定されるプラグイン名(プラグインがいくつかの手続きを登録するように)、入力パラメータや出力パラメータへのポインタを取得する。関数のプロトタイプを以下に示す。MAIN()MAINはCのマクロである。引数の初期化を行うおまじないである。これによって、PLUG_IN_INFOを適切なタイミングで呼び出すことができる。プラグインには必要な処理である。query()関数query()は登録手続きと、入力引数の定義を扱う。これらの情報は立ち上がり時間を短縮するために保存され、プラグインに変更があった場合のみ再読み込みされる。World!"プラグインのquery()関数は次のようになる。(void){...}GimpParamDefは3つの事柄を含んでいる。一つ目は引数の型、二つ目はその名前、三つ目はパラメータに関する記述である。gimp_install_procedureはprocedure名、いくらかの記述とヘルプとなる文字列、プラグインがどこに入るべきかを示すメニューのパスを定義する。GRAY*"という記述は、処理されたimageの型を宣言する。選択できる、この時アルファ値を持たせたりすることもできる。GRAYまたはGRAYのimageの型を表している。"GIMP_PLUGIN"は、このprocedureを外部対応するために宣言する、そしてGIMPのコアで実行されない。Details"でPDBに登録されるか確認する。run()関数PLUG_IN_INFOで求められているもう一つの関数がrun()である。プラグインの中心はrun()である。return_vals)は、少なくともプラグインの状態に関係する一つの値は持つべきである。通常、この変数は"GIMP_PDB_SUCCESS"で保持するだろう。プラグインは様々なやり方で動作させることができる。GIMPを対話的に動作させているなら(通常起動)、GIMPメニューから動作させることができる、またscriptやbatchとして(まとめて)処理できるし、"フィルタ->再適用"としても使える。入力引数"run_mode"は次の中から一つ適用できる。メモリの値を利用し処理を呼び出す。World!"というメッセージを含むダイアログを表示するようにする。嬉しいことに、これはGTK+ではとても簡単なことである。以下にその関数を示す。...}プラグインを走らせてみると、以下のように動作する。次回は、より役立つプラグインを作成する。プラグインでimageデータを受け取るやり方を扱う。プラグインをよりよく使う為に、タイルを詰めていく画像処理を扱うことで、GIMPのimage構造をどのように使うのか示す。2.5でライセンスされてます。追記)2P目の私的和訳を以下のリンク先に作成しました。いうのには合ってないなぁtdiaryの形式にたぶん合わせて書いてみたけど、これじゃあRSSアグリゲータで見てたりすると項目が不自然に増えてしまうなぁ...。2.3.3-p222。