0

Script-Fu の間違えやすい真偽値

前回から時間を空けてScript-Fuを書くと毎回同じミスをするので、自分への戒めをこめて間違えやすいポイントを書いておくことにした。

よくある間違い

Script-Fuではユーザーに入力してもらうための☑チェックボックスを SF-TOGGLE で設定でき、チェックされたときは TRUEが変数に代入され、チェックされなかったときは FALSE が代入される。

そこまではなんの問題もない。問題はこのTRUE,FALSEを使って条件判定をするときだ。

(if FALSE 0 1)

schemeが全く読めない人向けに書いとくと rubyの

if FALSE then
  0
else
  1
end

と同じような意味になる。

当然この処理で “1” が返ってくることを期待してるわけだけど、これだと “0” が返ってくる。

期待通りに動かない理由

これは scheme を知ってる人にとっては当たり前なんだろうけども、scheme で真偽値は #t と #f で表され、それ以外の数値は真として解釈される。だから期待通りの処理をしたければ

(if (= arg TRUE) 0 1) ;argには TRUE か FALSE が入ってる

としなければならない。

果たしてこれを書いたおかげで次回の作成時に覚えておけるかどうかはわからない。 覚えてると良いなあ。

Filed under Script-Fu Tips

Windows用のアイコンは64×64,32×32,16×16などの複数のサイズの画像を中に保持しています。


画像のアイコンは有難屋

GIMPでこのようなアイコンを作りたければ、それぞれのサイズの画像を用意して.icoで保存すれば後はGIMP側で処理を行ってくれます。

ただ、それさえも怠惰な人間である自分にはめんどくさいので自動で行える Script-Fu を書きました。

使い方

特に説明する必要はないかと思いますが、チェックボックス☑ でチェックされたサイズの画像のみアイコンに収納します。 元画像には変化はありません。 事前にレイヤーをmergeしたりする必要もありませんし、なんなら全く関係ないデジカメでとったままのサイズの風景の写真をアイコンに変更することもできます。 それに需要があるかどうかはわかりませんが。

注意点

保存する場所に同名の .ico ファイルがあれば確認なしに上書きされてしまいます。 事前に確認しておいてください。

ダウンロードとインストール

このファイルをダウンロードして解凍して出てきたsettings フォルダを GIMPの設定フォルダに上書きしてください。
save-image-as-icons.zip

Filed under スクリプト配布
0

GIMPで.epsファイルを開く

2chで.epsファイルが開けないって質問があったので確認してみた。

gimpでEPSファイル見るのにGS_PROGを設定しろとかでたので
システムの環境変数設定にPATHを作ってghostscriptの場所を指定したんだけどうまくいきません
どうすればいいんですか
from http://hibari.2ch.net/test/read.cgi/software/1299821250/230n

Ghost Scriptのインストール

1. まず「Ghostscript 9.02 (日本語版)」をダウンロードしてインストール。
ミラー(W32TeX), ミラー(東京大学)

設定は何も変えずに「次へ」を連打コースのインストールでお願いします。

インストールディレクトリを変えても問題ないらしいけど、フォルダ名にスペースが入ってるとろくな目にあった記憶がないので俺はインストール先を変えませんでした。

環境変数の設定

次に環境変数の設定を行います。 環境変数の変更を反映させるには必ず編集したあとに一度GIMPを再起動させてください。
ちなみにRapid Environment Editor とか入れとくと楽に編集できます。

「ユーザー変数」でも「システム変数」でもどっちでもいいんだけど、俺は「ユーザー変数」の方に”GS_PROG”という変数を作って”C:\gs\gs9.02\bin\gswin32.exe”を設定しました。”PATH”じゃなくて”GS_PROG”ね。

これで動く人もいるみたいなんだけど、うちの環境では動きませんでした。(ノД`)・゜・。

仕方なく他のサイトを探してると「gswin32.exe じゃなくて gswin32c.exe を使う。」という情報があったのでGS_PROGの値を変更してみるけどやっぱりダメ。

あんまりやりたくなかったけど、実行ファイルをGIMPの bin フォルダに直接ぶち込む方法を試したらやっと動きました。

結論(ここだけ読めばOK)

1.「Ghostscript 9.02 (日本語版)」インストール

2. “gimp-2.6.exe” のあるフォルダ(うちの環境だと “P:\Dropbox\bin\gimp26\App\gimp\bin”) に “gswin32c.exe” をコピーしてGIMPを再起動する。

3. サンプルファイルを開いて試してみる。

4. でけたー。 ヽ( ´∀`)ノ

以上です。”gswin32.exe” では動かないのでファイルを間違えないように気をつけてください。

参考ページ

Problem opening .eps files
http://registry.gimp.org/node/412

Ghostscript のインストール
http://www.geocities.co.jp/gimproject/tips/ghostscript.html

Ghostscript 9.02 + GSview 4.9 の日本語版
http://auemath.aichi-edu.ac.jp/~khotta/ghost/

Filed under Tips
0

Script-Fuで使える引数一覧

Script-Fuで使える引数一覧です。

 SF-IMAGE 	"Image" 0
 SF-DRAWABLE 	"Drawable" 0
 SF-VALUE 	"value" "10"
 SF-TOGGLE 	"toggle" TRUE
;初期値 50, 最小値 0, 最大値 100, small-step, large-step,
 SF-ADJUSTMENT 	"adjustment int slider" '(50 0 100 1 10 0 0)
 SF-ADJUSTMENT 	"adjustment float slider" '(50 0 100 1 10 1 0)
 SF-ADJUSTMENT 	"adjustment int roll-box" '(50 0 100 1 10 0 1)
 SF-ADJUSTMENT 	"adjustment float roll-box" '(50 0 100 1 10 1 1)
 SF-FILENAME 	"filiname" "filiname"
 SF-STRING 	"string" "文字列"
 SF-FONT 	"font" "Sans"
 SF-COLOR 	"color" '(256 0 0)
 SF-OPTION 	"option" '("一つ目" "二つ目" "三つ目")
 SF-GRADIENT 	"gradient" "FG to Transparent"
 SF-DIRNAME 	"dirname" "Desktop"

実行結果がこちら。

実際に数値を入れて確かめたい方はこちらをダウンロードして使ってください。
fe-arg-sample.scm

Filed under Script-Fu Tips

Script-Fu の解説続き

前回に引き続いて実際に公開してる[複数の画像からパターンを一括作成]を用いてのScript-Fuの解説です。
今回はメインの処理部分を見ていきます。

(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)))))

define で関数の定義

まず、一行目。

(define (script-fu-fe-layers-to-patterns img drawable dir)

この define を使うことにより新しい関数を定義できます。
引数の一つ目が関数の名前、ここでは script-fu-fe-layers-to-patterns になっています。
その後ろについてる img, drawable, dir の3つが引数ですね。
これは前回の script-fu-register で使った SF-IMAGE, SF-DRAWBLE, SF-DIRNAME を受け取ってます。

そうそう、関数名は頭に script-fu- が付けることが決まってるそうです。
あとは他のスクリプトと被らないようにだけ気をつけて適当に命名してください。

便利な map の使い方

(map
(lambda (layer)

ここがとっつきにくいポイントなので、map を使った簡単な例を紹介ます。

(map + '(1 2 3) '(4 5 6))

では、GIMPを立ち上げてメニューの[フィルタ]→[Script-Fu]→[コンソール]を開いて
上のコードを入力欄にいれて、エンターキーを叩いて確定してください。

(5 7 9)

と表示されたでしょう。次は + を * に変えて入力してください

(map * '(1 2 3) '(4 5 6))

こんどは

(4 10 18)

と表示されましたね。同じように – や / も試して見てください

(map - '(1 2 3) '(4 5 6)) ; (0.25 0.4 0.5)
(map - '(1 2 3) '(4 5 6)) ; (-3 -3 -3)

規則には気づかれたでしょうか?
具体的に述べますと map は 第一引数に関数をとりそれ以降のリストに適用し、
その結果をリストで返します。つまり

(map + '(1 2 3) '(4 5 6))

(list (+ 1 4) (+ 2 5) (+ 3 6)) ; listはリストを返す関数

と同様の処理になります。大変便利な関数なのですが普通は+などの簡単な処理ではなく
自分の定義したもっと複雑な関数を適用させる事が多いでしょう。

scheme でよく使う lambda とは

そこで出てくるのが lambda(無名関数)です。
無名関数とはその名の通り名前を持たない関数です。
言葉にするとややこしいですが「関数を定義するまでもない簡単な関数が欲しい時に使う」ぐらいの理解で大丈夫でしょう

さて、その使い方の解説のために初めは名前を持つ関数を作ってみます。

(define (add-2 n) (+ n 2))

この関数 add-2 は 数字を一つ引数にとり、その数字に 2 を足して返します。先程のmapと組み合わせると

(map add-2 '(1 2 3)) ; (3 4 5)

となります。実際にGIMPのコンソールで試してみてください。
そしてこれを lambda を使って書くとどうなるかといいますと

(map
(lambda (n) (+ n 2))
'(1 2 3))

となります。 lambdaを使うことによって add-2 を使わずに記述できるようになりました。

(lambda (引数) 処理部分)

という構造です。この map と lambda の組み合わせは scheme では頻繁に登場します。
よく C や JAVA のプログラミングに慣れている人が while や if 文を使って記述している処理も
map, lambda を使えば簡潔にわかりやすく書けてしまうことも多々ありますので、どんどん使っていきましょう

let の使い方

次は let についての説明です

(let* ((basename (remove-extension
                  (car (gimp-drawable-get-name layer))))
       (filename (concat dir "/" basename ".pat")))

また難しいですね。解説するには長すぎるので、短いサンプルをひとつ

(let* ((foo 3)(bar 1)) (+ foo bar))

この処理では局所変数 foo に 3 を bar に 1 を代入しその合計を返しています。
scheme では変数を set! でも代入できますが推奨されていませんのでこのような処理になります。
[複数の画像からパターンを一括作成]のスクリプトでは局所変数 basename と filename に必要な情報を代入してるわけです。

長くなってきましたので今回はここまで。 あと1,2回で終わります

Filed under スクリプト配布

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 を実行したとき、ユーザーに選択や入力のためのダイアログが表示されます。

script_fu_tutorial01_01.jpg

思ったより長くなっちゃいましたのでので、続きは次回。

Filed under スクリプト配布
0

鉛筆画スクリプト[色鉛筆も](Script-Fu)

こちらのチュートリアルをscript-fuに書き換えました。
How To Turn A Photo Into A Sketch by HarleyJane
http://jeff-flowers.com/how-to-turn-a-photo-into-a-sketch/
素晴らしいチュートリアルを公開してくれている HarleyJane さんに感謝。
サンプル

pencil-sketch-sample.jpg

[フィルタ]->[芸術]->[Pencil Sketch]から呼び出してください。
Download : (2つとも必要です)
0-fe-util.scm
fe-pencil-sketch.scm
動作確認 : WinXP SP3, GIMP 2.6.5 Portable
Scriptの導入はこちらを参照してください
http://www.geocities.jp/gimproject/scripts/kaisetu.html

Filed under スクリプト配布
5

縦書きふ~[ルビ機能付](Script-Fu)

GIMPで縦書きを行います。
ruby(ルビ)をつける機能も備わっています。
2ch の [GIMPを使おう Part17]の321氏のスクリプトを
467氏が改良を行い、更にそれを改造したのがこれです。

fe-tategaki2.jpg

fe-tategaki1.jpg

[ツール]->[縦書きふ~(ルビ)]から呼び出してください。
Download : (2つとも必要です)
0-fe-util.scm
fe-tategaki.scm
動作確認 : WinXP SP3, GIMP 2.6.5 Portable
Scriptの導入はこちらを参照してください
http://www.geocities.jp/gimproject/scripts/kaisetu.html
2010/02/10追記
「ぅ」や「っ」等の小文字の位置修正。

Filed under スクリプト配布

こんな風に文字部分をくり抜いた
画像作成方法のチュートリアルです。
fe_square.png
1.まず、新規画像を作成してくり抜きたい文字を
文字ツールで書きます。フォントサイズは100程度で。
tutoril_fe_square1.jpg
2.文字レイヤより少し大きめの選択範囲を指定して
[選択]->[角を丸める]で選択範囲の角を丸めます。
tutoril_fe_square1.jpg
半径の値は40ぐらいで適当に。
3.選択範囲を反転させて、次に「色で選択」ツールを使い
Shiftキーを押しながら文字の部分を選択することで
文字の部分を選択範囲を追加します。
4.レイヤボックスで背景レイヤを選択して
右クリックのメニューから「アルファチャンネルを追加」します。
tutoril_fe_square3.jpg
5.Deleteキーで選択されている範囲を透明にします。
文字レイヤはもう要らないので消してしまいます。
tutoril_fe_square4.jpg
6.[フィルタ]->[ロゴ効果]->[グラデーションベベル]を適用させます。
tutoril_fe_square5.jpg
7.[色]->[トーンカーブ]で色を調整します。
tutoril_fe_square6.jpg
8.[画像]->[画像の自動切抜き]でサイズを調整します
9.四隅の白い背景部分を消しゴムで透明にして
レイヤボックスの右クリックメニューから
[可視レイヤーの統合]して作業は終了です。
fe_square.png

Filed under チュートリアル

それぞれのレイヤを個別にパターン(pattern)としてまとめて保存します。
大量のパターンにしたい画像がある時などにどうぞ。
パターンを探すならこちらから
http://www.colourlovers.com/
レイヤ名がそのままファイル名とパターン説明になります。
fe-layers-aspatterns.jpg
レイヤとして保存したいファイルを全て読み込んで
[ファイル]->[save-layers-as-patterns]を呼び出してください。
保存先が指定できますので、その場所に*.pat ファイルが保存されます。
Download : fe-layers-to-patterns.zip
動作確認 : WinXP SP3, GIMP 2.6.5 Portable
Scriptの導入はこちらを参照してください
http://www.geocities.jp/gimproject/scripts/kaisetu.html

Filed under スクリプト配布