[Part I. GIMP基礎功]

[Part II. 一種效果的誕生]
[Part III. Script-Fu的秘密]

23.7 螢光字,修改成可「單行」執行的 Script-Fu

三種單步執行程式的方式
  • 第一種方式:只修改註冊於PDB內的函數名稱
  • 第二種方式:修改成在 Console 內可一行一行執行的 Scheme 程式碼
  • 第三種方式:修改成在 Console 內可一行一行執行的 Python 程式碼

  • 本節介紹「第二種方式」。
  • alien-glow-logo.scm 完整的程式碼可參考 23.5 節。
  • 也可到 GIMP 系統的 scripts 目錄下找到該檔案。
  • 最主要修改的部份是,將「對話框接收輸入變數值」修改成「直接指定輸入變數值」。
  • 先要瞭解,alien-glow-logo.scm 程式碼的執行流程。


直接指定輸入變數值
  • 修改成最多的地方就是下列這兩大段。
  • 修改後的程式碼,不再需要預先定義函數 script-fu-newsprint-text ,但是要預先設定變數名稱、變數值 。

(define (script-fu-alien-glow-logo text
size
font
glow-color)
(let* (
(img ......)
(border .....)
(grow .....)
(feather .....)
(text-layer .....)
(width .....)
(height .....)
)


(define (apply-alien-glow-logo-effect img
logo-layer
size
glow-color)
(let* (
(border ......)
(grow ......)
(feather ......)
(width ......)
(height ......)
(bg-layer ......)
)


  • 從下列的程式碼得知變數值的型態與大小 。
SF-STRING _"Text" "ALIEN"
SF-ADJUSTMENT _"Font size (pixels)" '(150 2 1000 1 10 0 1)
SF-FONT _"Font" "Sans Bold"
SF-COLOR _"Glow color" '(63 252 0)



修改後的程式碼,與測試的結果圖
  • 下面是修改後的程式碼。
  • 啟動 GIMP Script-fu Console
  • 將下面的 Scheme 程式碼,全部選取、複製、再貼入 Script-fu Console 文字框,按下 Enter 。
  • 過一會,就會看到結果圖。


(define text "ALIEN")
(define size 150)
(define font "Sans Bold")
(define glow-color '(63 252 0))

(define img (car (gimp-image-new 256 256 RGB)))

;(gimp-display-new img)
;也可在此處就顯示出 img 物件
;也就是新增影像視窗並顯示出目前的圖案

(define border (/ size 4))
(define grow (/ size 30))
(define feather (/ size 4))
(define text-layer (car (gimp-text-fontname img -1 0 0 text border TRUE size PIXELS font)))
(define width (car (gimp-drawable-width text-layer)))
(define height (car (gimp-drawable-height text-layer)))

(define logo-layer text-layer)

;(define border (/ size 4)) ;這 5 行重複前面的變數定義
;(define grow (/ size 30)) ; 因此將這 5 行起來起來註解起來
;(define feather (/ size 4))
;(define width (car (gimp-drawable-width logo-layer)))
;(define height (car (gimp-drawable-height logo-layer)))
(define bg-layer (car (gimp-layer-new img width height RGB-IMAGE "Background" 100 NORMAL-MODE)))
(define glow-layer (car (gimp-layer-new img width height RGBA-IMAGE "Alien Glow" 100 NORMAL-MODE)))

(gimp-image-undo-disable img) ; 關閉復原的功能

;
;
;接下來一大串程式碼相當於
;(apply-alien-glow-logo-effect ...)
;
(gimp-context-push)

(gimp-selection-none img)
(script-fu-util-image-resize-from-layer img logo-layer)
(script-fu-util-image-add-layers img glow-layer bg-layer)
(gimp-layer-set-lock-alpha logo-layer TRUE)
(gimp-context-set-background '(0 0 0))
(gimp-edit-fill bg-layer BACKGROUND-FILL)
(gimp-edit-clear glow-layer)
(gimp-selection-layer-alpha logo-layer)
(gimp-selection-grow img grow)
(gimp-selection-feather img feather)
(gimp-context-set-foreground glow-color)
(gimp-edit-fill glow-layer FOREGROUND-FILL)
(gimp-selection-none img)

(gimp-context-set-background '(0 0 0))
(gimp-context-set-foreground '(79 79 79))

(gimp-edit-blend logo-layer FG-BG-RGB-MODE NORMAL-MODE
      GRADIENT-SHAPEBURST-ANGULAR 100 0 REPEAT-NONE FALSE
      FALSE 0 0 TRUE
      0 0 1 1)

(gimp-context-pop)
;
;以上相當於(apply-alien-glow-logo-effect ...)
;
;

(gimp-image-undo-enable img) ; 重新啟動復原的功能

(gimp-display-new img);這一行也可以移到 img 物件生成時就執行