hack のためのネタ帳, etc,,,

GIMP のマクロと言えば良いのか?
LISP(Scheme) でガシガシ画像処理

配置

GIMP 2.6 だとホームディレクトリ以下 ~/.gimp-2.6/scripts/ に、拡張子 .scm としたファイルを配置すれば良い。
起動時に読み込まれるので、スクリプトの修正をして再読み込みさせたい場合「フィルタ」→「Script-Fu」→「スクリプトを再読み込み」すると良い。

デバッグ

スクリプト中に
(tracing TRUE)
と記述しておくと、「ウインド」→「ドッキング可能なダイアログ」→「エラーコンソール」へトレース情報が表示される。
エラーコンソールへの直接出力は gimp-message 関数で行えるが、これは STRING 限定。

手続き write, display 等を使えば外部表現を確認できるのだが、これは output-port が必要。
「フィルタ」→「Script-Fu」→「Script-Fu コンソール」から実行すると Script-Fu コンソールが標準出力(current-output-port)になる。
エラーコンソールを意味する output-port が分かればよいのだが、見つからない。

プログラミングGaucheの練習問題(オブジェクト-外部表現文字列変換) の例にあるように、手続き call-with-output-string が使えれば外部表現を文字列として得ることが出来るのだが、少なくとも GIMP2.6 の Script-Fu では手続き call-with-output-string が使えない。

SLIB から strport.scm を持ってくれば、テンポラリファイルを経由した形で実装された手続き call-with-output-string が使えそう。ただしこれには Template.scm で定義されてる手続き tmpnam が必要。しかし、手続き tmpname で必要な手続き getenv がないのでこれをどうにかしないと駄目だったりとか。

以前、以下のスレで、まさにそういう質問してる人を見つけたが華麗にスルーされてたりとか

いろいろ探してみると
Gimp2.6で使える関数
辺りに、手続き open-output-string があるけど get-output-string ないので書き出したのに取り出せないって。むぅ。
独習 Scheme 三週間/7.4 文字列ポート
にも get-output-string で取り出せと書いてあるのだが、
いろいろ試してみたところ、以下の方法でいける模様。

writetostring.scm

つまり open-output-string で与えた変数をそのまま読めば良いようだが write した結果が初期状態で与えた文字列の長さを越えた部分は切れてしまう模様。これはちょっと悩ましい。

習作

refw7.scm

refwxp.scm

マスク決め打ち汚ス

関連

タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます