- 互動,意指一部分操作 GIMP 介面視窗,一部分由 Script-Fu Code 完成。
- 在 GIMP 之中,大多數的操作,都可用程式碼來完成。
- 但是,不一定要寫成一個「完整的 Script-Fu 的 scm 檔案」,不一定要完全自動化整套的影像處理流程。
- 以「開檔」為例
- 開啟影像檔,可透過介面視窗的選單,與對話盒的操作。
- 開啟影像檔,也可使用 Script-Fu Code 。
- 開檔,其對應的函式為 gimp-file-load 。
- 半自動化的操作方式
- 也許,可以用 gimp-file-load 函式載入影像檔,再透過 GIMP 介面視窗的操作來畫圖。
- 也許,可以用 GIMP 介面視窗開啟影像檔,產生一個形狀特殊的選取區域,再利用 Script-Fu Code 連續執行幾個濾鏡來潤飾影像。
- 對於,初學 Script-Fu 的人,這種半自動化的操作方式,更容易體會 Script-Fu 優點,更容易學習 Script-Fu 。
- 類似於「物件導向程式設計」對於物件的定義,物件包裹了一些資料變數與一組相關的操作函式。
- 在 GIMP 之中,影像、色版、圖層、選取區域、遮罩,這些東西都可稱為物件。
- 如果要用 Script-Fu Code 來控制 GIMP 介面視窗的操作,至少要知道影像物件的 id 。
- GIMP 對各種物件的 id 都採用流水號的編排,從 1 開始編號 。
- Script-Fu 所用的與語言是 Scheme。
- Scheme 最重要的資料結構 list。
- 但是 Scheme list 資料索引值是從 0 開始增加的 。
- list 可以是空的,也可以只有一個 atom 。
- 一個 list 可以儲存很多 atom 。
- 甚至, list 內部還可儲存其它 list 的資料結構。
- 下面是錯誤的,因為回傳值是一個 list 。
- (define drw (gimp-image-get-active-layer img))
- 回傳值是 list 內部包含了一個「圖層 id」
- 下面是正確的,car 函數會取出 list 的頭(第一個元素)。
- (define drw (car (gimp-image-get-active-layer img)))
- 「圖層 id」是正整數 1 、2 、3 ......
- 以簡單的方形黑色塊,示範 id 的取得。
- 從影像視窗的標題列得知,第一張開啟的影像編號為 1.0
- 重複開啟相同的影像,編號為 2.0
- 啟動 GIMP Script-fu Console
- 鍵入 (gimp-image-list)
- 得到 (2 #(2 1))
- 代表目前開啟兩張影像檔(雖然是相同的檔案),有兩個影像物件。
- JPEG 檔只有一個圖層。
- 在 Script-Fu Console 的文字輸入框內
- 鍵入 (define drw (gimp-image-get-active-layer 1))
- 就可將取得「 影像 id 為 1」 的「 active 圖層 id」
- active 是指目前選到的、會發生作用的、會發生作用的圖層。
- 通常,都是用視窗介面的選單,來執行濾鏡的功能,以此,施加濾鏡效果。
- 在此示範,用 Script-Fu Code 連續施加兩種濾鏡的效果。
- 開啟測試的圖檔,假設受作用的影像其 id 為 1 。
- 將下列的程式碼,複製後,貼入 Script-Fu Console 輸入框 。
- 按下 Enter 鍵,就會看到結果圖,如下所示。
(define img 1) ;
(define drw (car (gimp-image-get-active-layer img)))
(define blur-radius 10)
(define cell-size 10)
(plug-in-gauss-iir RUN-NONINTERACTIVE img drw blur-radius 1 1)
(plug-in-newsprint RUN-NONINTERACTIVE img drw cell-size 0 0 45.0 3 45.0 0 45.0 0 45.0 0 3)