複製一個Script-Fu程式:slime2.scm

 

 

        要寫Script-Fu程式前,先複製一個Script-Fu程式,看Script-Fu程式是如何運作的。

 

一、目錄與路徑:

Linux的使用者

在Linux下當你第一次啟動Gimp程式時,Gimp程式會在使用者的根目錄下產生 .gimp的隱藏目錄,儲存使用者與Gimp相關的資料。 .gimp目錄下還有許多子目錄,一開始這些目錄都是空目錄,brushes目錄用來儲存使用者自己所製作的brush檔案,patterns目錄用來儲存使用者自己所製作的pattern檔案,scripts目錄用來儲存使用者自己所製作的scripts檔案,一開始這些目錄都是空目錄。

而Gimp程式的安裝目錄(我的是:gimp)下也有一些子目錄,用來儲存Gimp程式已有的brush檔案、pattern檔案、script_fu檔案、plug_in檔案、、、。將./gimp/scripts/slime.scm檔複製一份到~./gimp/scripts/目錄下,將檔名改變為slime2.scm。

       

Window98的使用者

若是在Win98下使用Gimp,第一次啟動Gimp程式時,Gimp程式會在的安裝目錄下,為使用者產生 _gimp1.2.user_name的目錄(不是隱藏目錄)。我登入Win98的名字sclee,我的Gimp程式安裝目錄:C:\Program Files\GIMP\,Gimp為我產生的目錄:C:\Program Files\GIMP\_gimp1.2.sclee。

將C:\Program Files\GIMP\scripts\slime.scm檔複製一份到C:\Program Files\GIMP\_gimp1.2.sclee\ scripts\目錄下,將檔名改變為slime2.scm。

 

二、slime2.scm程式碼:

l          複製slime.scm檔成slime2.scm後

l          使用文字編輯器修改slime2.scm檔

l          以下是slime2.scm程式碼修改的部份

l          第1行script-fu-slime-logo改為 script-fu-slime-logo2

l          第35行script-fu-slime-logo改為 script-fu-slime-logo2

l          第36行Slime改為Slime2

 

1: (define (script-fu-slime-logo2 text size font)

2:   (let* ((img (car (gimp-image-new 256 256 RGB)))

3:         (text-layer (car (gimp-text-fontname img -1 0 0 text 30 TRUE size PIXELS font)))

4:         (width (car (gimp-drawable-width text-layer)))

5:         (height (* (car (gimp-drawable-height text-layer)) 1.3))

6:     (layer1 (car (gimp-layer-new img width height RGBA_IMAGE "Back" 100 NORMAL))))

7:

第1行

8:  ;; put the text white

9:    (gimp-invert text-layer)

10: ;; put the background black

11:     (gimp-palette-set-background '(0 0 0))

12:     (gimp-image-add-layer img layer1 1)

13:     (gimp-edit-fill layer1 FG-IMAGE-FILL)

14: ;; Resize the image

15:    (gimp-image-resize img width height 0 0)

16: ;; merge the text and the bg

17:    (set! sboub (car (gimp-image-merge-down img text-layer 0)))

18: ;; rotate the image from 90 degress

19:    (plug-in-rotate 1 img sboub 1 TRUE)

20: ;; put some wind

21:    (plug-in-wind 1 img sboub 10 1 8 1 1)

22: ;; rotate back

23:    (plug-in-rotate 1 img sboub 3 TRUE)

24: ;; wave it

25:    (plug-in-waves 1 img sboub 4 0 50 0 0)

26: ;; blur

27:    (plug-in-gauss-iir 1 img sboub 5 1 1)

28: ;; change the color to give the slime

29:    (gimp-color-balance sboub 0 1 -100 0 -100)

30:    (gimp-color-balance sboub 2 1 100 0 10)

31: ;; display

32:    (gimp-display-new img)))

33:

34:

 

35: (script-fu-register "script-fu-slime-logo2"

36:                     "<Toolbox>/Xtns/Script-Fu/Logos/Slime2"

37:                     "Slime yourself..."

38:

39:                     "Jean-Philippe Turcat (cmrjpt@soc.staffs.ac.uk)"

40:                     "Jean-Philippe Turcat"

41:                     "08/06/1999"

42:                     ""

43:                     SF-STRING "Text String" "Gimp"

44:                     SF-ADJUSTMENT "Font Size (pixels)" '(72 2 1000 1 10 0 1)

45:                     SF-FONT "Font" "-*-ComicsCarToon-*-r-*-*-24-*-*-*-p-*-*-*")

第35行

第36行

 

史萊姆字體

選單

l          若還未執行Gimp程式,請啟動Gimp程式。

l          若你已執行Gimp程式,執行[Gimp] -> Xtrns -> Script-Fu -> Refresh,更新Gimp的程序資料庫內的資料。

l          這時候Script-Fu / Logos內的子選單多了Slime2這個選項。

l          執行[Gimp] -> Xtrns -> Script-Fu -> Logos -> Slime2會產生一張史萊姆字體的Gimp四個字的圖。

 

三、程式碼與視窗界面的關係:

DB Browser對話盒

DB Browser對話盒的一部分

執行[Gimp] -> DB Browser,

查詢script-fu-slime-logo2這函數

 

slime2.scm程式碼第35行

script-fu-register "script-fu-slime-logo2"

代表跟程序資料庫註冊函式。

 

DB Browser對話盒,所顯示的資訊與程式碼的對應關係為:

對話盒參數

Slime2.scm程式碼

Name:

程式碼第35行

Blurb:

第36行

In:

第42行到第45行

Help

第37行

Author

第39行

Date

第40行

Copyright:

第41行

 


選單路徑

選單路徑

 

程式碼第36行

"<Toolbox>/Xtns/Script-Fu/Logos/Slime2"

代表slime2.scm這個script_fu在那一個選單路徑。

 

對話盒的參數設定

Logos/Slime2對話盒

Logos/Slime2對話盒,所顯示的資訊與程式碼的對應關係為:

對話盒參數設定

程式碼

Text String:Gimp

第43行

Font Size(pixels):72

第44行

Font: COMICSCARTOON

第45行

 


參數的意義

43行:SF-STRING "Text String" "Gimp"

l          SF-STRING,表示會在Logos/Slime2對話盒上產生一個字串的文字輸入框。

l          "Text String",為輔助說明的文字。

l          "Gimp",表文字輸入框內預設的字串為Gimp。

44行:SF-ADJUSTMENT "Font Size (pixels)" '(72 2 1000 1 10 0 1)

l          SF-ADJUSTMENT,在對話盒上產生一個可上下調整大小值的控制元件。

l          "Font Size (pixels)",為輔助說明的文字。

l          '(72 2 1000 1 10 0 1),字形大小預設值72、最小值2、最大值1000、每次調整控制元件增加值1。

45行:SF-FONT "Font" "-*-ComicsCarToon-*-r-*-*-24-*-*-*-p-*-*-*")

l          SF-FONT,在對話盒上產生一個字型設定按鈕,按下按鈕可啟動設定字型的對話盒。

l          "Font",為輔助說明的文字。

l          "-*-ComicsCarToon-*-r-*-*-24-*-*-*-p-*-*-*"),為預設字型,Gimp的字型是使用X11的格式。

第1行:(define (script-fu-slime-logo2 text size font)

藉由Logos/Slime2對話盒所輸入的參數設定script-fu-slime-logo2函式的text、size、font這三個變數。

OK按鈕:

按下Logos/Slime2對話盒的OK按鈕後,OK按鈕下方的文字顯示框內的文字會快速改變,此時script-fu-slime-logo2 函數被呼叫,傳入變數設定,slime2.scm從第1行執行到第32行。

第32行:(gimp-display-new img)

秀出最後的結果,一張史萊姆字體的Gimp四個字的圖

 

About按鈕

按下About按鈕後

按下Logos/Slime2對話盒About按鈕後,產生一對話盒,所顯示的資訊與程式碼的對應關係為:

 

對話盒參數

Slime2.scm程式碼

Name:

程式碼第35行

Help:

第37行

Author:

第39行

Date:

第40行

Copyright:

第41行