Script-Fuとは何か?
簡単にいうと自動化処理を記述するための方法です。
GIMPではそのために Scheme という括弧だらけの言語が採用されています。はじめはその見た目や独特さに戸惑うと思いますが、慣れてくるとrubyやjavascriptと似た性質がある事に気づきその面白さがわかってくるでしょう。
さて、前置きを長くおいても仕方がありませんのでまずこのチュートリアルで何を作れるようになるかを見ていきます。今回のお題はこのBlogで公開している「複数の画像からパターンを一括作成(Script-Fu)」を使うことにしましょう。
まず、実際に全体を見てください。
; This program is free software; ; you can redistribute it and/or modify ; it under the terms of the GNU General Public License Version 3. ; This program is distributed in the hope that it will be ; useful, but WITHOUT ANY WARRANTY; ; See the attached file or the link below. ; http://www.gnu.org/licenses/gpl-3.0.html ; ; Copyright (C) 2008 鉄(Tetsu) Mail : hogehoge@ironsand.net , ; Webpage : http://gimp.sblo.jp/ (lang:jp) ; ; 2009/03/15 save each layers as patterns (define (script-fu-fe-layers-to-patterns img drawable dir) (map (lambda (layer) (let* ((basename (remove-extension (car (gimp-drawable-get-name layer)))) (filename (concat dir "/" basename ".pat"))) (file-pat-save 1 img layer filename basename basename))) (vector->list (cadr (gimp-image-get-layers img))))) ;; add this script to the menu. (script-fu-register "script-fu-fe-layers-to-patterns" "/File/Save layers as patterns" "layers to patterns" "tetsu" ; writer "tetsu" ; copyright "2009/03" "" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-DIRNAME "Directory" "MyPicture_" )
全部で34行しかありません。コメントが13行ありますので実質21行ですね。
Schemeのコメント
コメントが13行と書きましたが、scheme では”;”で始まる行、もしくは”;”以降の部分すべてがコメントになります。コメント部分はGIMPからは無視されますが、人間には有益な情報が詰まっていますので初めから順に見ていきましょう。
; This program is free software; ; you can redistribute it and/or modify ; it under the terms of the GNU General Public License Version 3. ; This program is distributed in the hope that it will be ; useful, but WITHOUT ANY WARRANTY; ; See the attached file or the link below. ; http://www.gnu.org/licenses/gpl-3.0.html
はい、英語ですね。まず読む気がしませんね。ですが、安心してください。ここに書いてあるのは「このスクリプトがGPL3で配布されてますよ~」ということだけです。
GPLとは
GPLとはプログラムの配布におけるライセンスで、「自由に使っていいですよ。ソースコードも誰でも見れるようにしておきますよ。でも、あなたがこれを使うときも同じようにGPLライセンスを使って公開してくださいね」という物です。詳しくは下記のサイト参考にしてください。
http://www.opensource.jp/gpl/gpl.ja.html.euc-jp
http://www.gnu.org/licenses/gpl-faq.ja.html
; Copyright (C) 2008 鉄(Tetsu) Mail : web-@-ironsand.net , ; Webpage : http://gimp.sblo.jp/ (lang:jp) ; ; 2009/03/15 save each layers as patterns
次のこの部分は誰が書いたか、と連絡先(ダミー)それに、スクリプトの機能と、それを書いた日付が書いています。
schemeの基礎
そろそろ本題の処理部分に入っていきたいところですが、schemeの基礎部分を理解してないと何が何だか分からなくなってしまうので本当に最低限のことだけをお伝えしようと思います。まずschemeの全ての文は括弧で囲まれた形になります。例えば 3 と 4 と 5 を比べて、大きい方の数字を返すのは
(max 3 4 5)
になります。はじめの max が関数で、3, 4, 5 が引数ですね。JAVAなどの言語では引数が “,” で区切られますがschemeではスペースで区切られます。
スペースの代わりに改行してもOKです。だから上のコードは
(max 3 4 5)
と書いても良いわけです。ちなみにJAVAで同じ物を書くなら
max(max(3, 4), 5);
となります。それでは以上を踏まえた上で登録部分の処理から見ていきましょう。
(script-fu-register ;GIMPに登録するための関数 "script-fu-fe-layers-to-patterns" ;このスクリプトの関数名 "/File/Save layers as patterns" ;メニューのどこに表示させるか "layers to patterns" ;スクリプトの説明 "tetsu" ; writer ;製作者 "tetsu" ; copyright ;著作権者 "2009/03" ;作成日 "" ;色の形式(RGBなど) SF-IMAGE "Image" 0 ;GIMPで開いてる画像のID SF-DRAWABLE "Drawable" 0 ;DrawableのID SF-DIRNAME "Directory" "MyPicture_" ;ディレクトリを選択 )
この一行目の script-fu-register が関数で、ズラズラーと後ろに引数が並んでいます。コメントを足しておきましたので大体は上のコードを見て頂くとして、問題はSF-IMAGE SF-DRAWABLE SF-DIRNAME などですね。 初めの2つ SF-IMAGEと SF-DRAWBLE はGIMPで画像を開いてる状態でscript-fuを呼び出しますと、自動的にID(整数)が関数に渡されます。今回のようにそれ以外の SF-DIRNAME などが渡されますと script-fu を実行したとき、ユーザーに選択や入力のためのダイアログが表示されます。
思ったより長くなっちゃいましたのでので、続きは次回。