一個最簡單的Script_Fu:hi.scm
程式的主要架構
|
l 本程式hi.scm修改自slime.scm,刪去大部分程式碼。 l 執行[Gimp] -> Xtrns -> Script-Fu -> hi會產生右圖 l 程式主要由兩部份所主組成: 1到13行:以define函數定義script-fu-hi函數。 15到26行:以script-fu-register函數向資料庫註冊函數。 |
hi.scm執行結果 |
l 以gimp-text-fontname函數寫上Hi! l 以gimp-image-resize函數將影像改為適當大小。 |
|
1: (define (script-fu-hi 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))) 6: ) 7: ;; Resize
the image 8:
(gimp-image-resize img width height 0 0) 9: 10: ;;
display 11: (gimp-display-new img) 12: ) 13: ) 14: |
注意括號成對 l 1到13行:以define函數定義script-fu-hi函數。故第1行的第1個左括號與第13行的右括號成對。 l 15到26行:以script-fu-register函數向資料庫註冊script-fu-hi函數。故第15行的第1個左括號與第26行的右括號成對。 l 2到12行:以let*函數宣告區域變數並使用它。故第2行的第1個左括號與第12行的右括號成對。 l 2到6行:宣告區域變數,由於let*函數語法:(let* (variables) expressions),故第2行的第2個左括號與第6行的右括號成對。 l 若你自己寫Scheme的程式,必須注意括號的成對,這是最容易出錯的地方。 |
|
|
15: (script-fu-register "script-fu-hi" 16: "<Toolbox>/Xtns/Script-Fu/hi" 17: "Say
hi..." 18: 19:
"Modified by Samuel Li (sclee@eagle.ee.ntu.edu.tw)" 20:
"Jean-Philippe
Turcat (cmrjpt@soc.staffs.ac.uk)" 21:
"04/21/2001" 22:
"" 23:
SF-STRING "Text String" "Hi!" 24:
SF-ADJUSTMENT "Font Size (pixels)" '(72 2 1000 1 10 0 1) 25:
SF-FONT "Font"
"-*-ComicsCarToon-*-r-*-*-24-*-*-*-p-*-*-*" 26: ) |
選單在那裡? l 第16行:<Toolbox>表示這是一個不必有影像視窗就可執行的Script_Fu,相對於<Image>。<Toolbox>表示這Script_Fu程式在Gimp工具盒中的Xtrns選單的子選單中。 l <Image>表示點一下影像視窗按滑鼠右鍵出現一選單,Script_Fu程式在這選單的子選單中。 |
|
script-fu-register函數的前7個參數:
|
1 |
Name |
你所要註冊的函數名稱,不能與已註冊的函數同名。 |
Hi.scm所註冊的函數名稱為 "script-fu-hi" |
|
2 |
Location |
選單所在的位置。 |
"<Toolbox>/Xtns/Script-Fu/hi" |
|
3 |
Description |
以一段文字描述你的script的功能。 |
"Say hi..." |
|
4 |
Author |
script的作者的姓名。 |
"Modified by Samuel Li " |
|
5 |
Copyright |
版權宣告。 |
"Jean-Philippe Turcat " |
|
6 |
Date |
Script程式最後一版的寫作完成日期。 |
"04/21/2001" |
|
7 |
Type |
這個Script程式所處理的影像的色彩模式,色彩模式有RGB、RGBA、GRAY、INDEXED、INDEXEDA。 |
"" hi.scm自己會產生一個影像物件,故這個參數為空白值。 |
About對話盒
|
About對話盒 |
l 17到21行:在Script-Fu:hi的About對話盒內有對應的資料。 l 相當於script-fu-register函數第3、4、5、6個參數。 |
script-fu-register函數的第8個參數與之後的參數
第8個參數與之後的參數,不限定個數,是用來設定參數輸入對話盒內的參數。參數輸入對話盒內的資料最後由註冊函數(第1個參數)所接收,作為註冊函數的輸入變數。
第8個參數與之後的參數其設定的格式為:Param-type "Prompt text" "default value",(參數型態 "提示文字" "預設值")。參數型態暗示了註冊函數的輸入變數的變數型態。
|
參數輸入對話盒 |
l 23到25行:在Script-Fu:hi的參數輸入對話盒內有對應的資料。 l 相當於script-fu-register函數第8、9、10個參數。 |
|
23行:SF-STRING "Text String" "Hi!" l SF-STRING,表示會在參數輸入對話盒上產生一個字串的文字輸入框。 l "Text String",為輔助說明的文字。 l "Gimp",表文字輸入框內預設的字串為Gimp。 |
|
|
24行: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。 |
|
|
25行:SF-FONT "Font" "-*-ComicsCarToon-*-r-*-*-24-*-*-*-p-*-*-*") l SF-FONT,在對話盒上產生一個字型設定按鈕,按下按鈕可啟動設定字型的對話盒。 l "Font",為輔助說明的文字。 l
"-*-ComicsCarToon-*-r-*-*-24-*-*-*-p-*-*-*"),為預設字型,Gimp的字型是使用X11的格式。 |
|
|
第1行:(define (script-fu-hi text size font) 藉由對話盒所輸入的參數,設定script-fu-hi函式的text、size、font這三個變數。 |
|
|
OK按鈕: 按下對話盒的OK按鈕後,OK按鈕下方的文字顯示框內的文字會快速改變,此時script-fu-hi函數被呼叫,傳入變數設定,hi.scm從第1行執行到第13行。 |
|
|
第32行:(gimp-display-new img) 秀出最後的結果,透明底色的Hi!。 |
|
|
1 |
Name |
你所要註冊的函數名稱,不能與已註冊的函數同名。 |
Hi.scm所註冊的函數名稱為 "script-fu-hi" |
|
2 |
Location |
選單所在的位置。 |
"<Toolbox>/Xtns/Script-Fu/hi" |
|
3 |
Description |
以一段文字描述你的script的功能。 |
"Say hi..." |
|
4 |
Author |
script的作者的姓名。 |
"Modified by Samuel Li " |
|
5 |
Copyright |
版權宣告。 |
"Jean-Philippe Turcat " |
|
6 |
Date |
Script程式最後一版的寫作完成日期。 |
"04/21/2001" |
|
7 |
Type |
這個Script程式所處理的影像的色彩模式,色彩模式有RGB、RGBA、GRAY、INDEXED、INDEXEDA。 |
"" hi.scm自己會產生一個影像物件,故這個參數為空白值。 |
2行到11行:
l 2: (let* ((img (car (gimp-image-new 256 256 RGB)))
產生新影像大小為256x256、RGB模式,將新影像存在img變數內。
l 3:(text-layer (car (gimp-text-fontname img -1 0 0 text 30 TRUE size PIXELS font)))
產生新文字圖層,將新文字圖層存在text-layer變數內。
l 4: (width (car (gimp-drawable-width text-layer)))
使用gimp-drawable-width得到文字圖層的寬度並存在width變數內。
l 5: (height (car (gimp-drawable-height text-layer) ))
使用gimp-drawable-height得到文字圖層的高度存在height變數內。
l 8: (gimp-image-resize img width height 0 0)
將影像改為適當大小。
l 11: (gimp-display-new img)
產生一影像視窗,秀出圖片來。
DB Browser內的資料:
在本文中,許多函數的功能沒有解釋清楚,函數的參數如何設定完全沒有解釋。一切的答案都在DB Browser內。
有些東西請多思考,自行領會。
l 2: (let* ((img (car (gimp-image-new 256 256 RGB)))
|
|
產生影像物件並不能馬上使用gimp-display-new來顯示影像,影像物件一定要有圖層才能有東西可顯示。 gimp-layer-new可產生圖層。 |
l 3:(text-layer (car (gimp-text-fontname img -1 0 0 text 30 TRUE size PIXELS font)))
|
|
Gimp的字型是使用X11的格式。 |
l 4: (width (car (gimp-drawable-width text-layer)))
|
|
什麼是drawable? 就是圖層。 一個影像可由多個圖層組成,現在被選到的,可在其上作運算的圖層稱為drawable。 |
l 5: (height (car (gimp-drawable-height text-layer) ))
|
|
|
|
l 8: (gimp-image-resize img width height 0 0)
|
|
l 11: (gimp-display-new img)
|
|
開一個新視窗來顯示影像。 |