[Part I. GIMP基礎功]

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



26.8 島嶼圖,摸索轉碼的過程,與須注意的語法特點

  • 本節介紹單步執行的「第三種方式」,修改成在 Console 內可一行一行執行的 Python 程式碼 。
  • 接續前節,使用前節更改後的 Scheme 程式碼,將它改成 Python 程式碼 。


修改「變數值指派」的程式碼
  • 有些地方,可以直接手動更改。有些地方,手動更改,太累人了。
  • 文字編輯器,都有「搜尋」與「取代」的功能,善用「搜尋」與「取代」,可幫助修改程式碼。

(define width 256 )
(define height 256 )
(define seed 32 )
(define detail 4 )
(define landheight 60 )
(define seadepth 4 )
(define xscale 4 )
(define yscale 4 )
(define gradient "Land 1")

  • 可分段使用「搜尋」與「取代」的功能。
  • 例如,上一段程式碼是用於「變數值指派」。
    • (define ...) 開頭的 (define 是要刪除的
    • (define ...) 結尾的 ) 是要刪除的
    • 將「空白」取代為 等號 =
  • 「取代」之後的程式碼,如下所示。

width = 256
height = 256
seed = 32
detail = 4
landheight = 60
seadepth = 4
xscale = 4
yscale = 4
gradient = "Land 1"


修改「指派影像物件、圖層物件」的程式碼

(define img (car (gimp-image-new width height RGB)))
(define layer-one (car (gimp-layer-new img width height RGB-IMAGE "Bottom" 100 NORMAL-MODE)))
(define layer-two 0)

  • 上一段程式碼是用於「指派影像物件、圖層物件」。
    • (define ...) 開頭的 (define 是要刪除的
    • (define ...) 結尾的 ) 是要刪除的
    • 利用換行符號的逃脫字符 \n 可輕鬆刪除結尾的 ) ,也就是,在文字編輯器「取代」功能的對話框內,將 )\n 取代為 \n
    • 將 (car 取代為 等號 =
    • 將(...... layer-two 0)「空白」取代為 等號 =
    • 將剩餘的「空白」取代為 "逗點加空白"「, 」
    • 將 (gimp 取代為 pdb.gimp
    • 將 減號 - 取代為 _ 底線
  • 其它不符合 Python 語法之處,直接手動更改。
  • 「取代」之後的程式碼如下所示。

img = pdb.gimp_image_new(width, height, RGB)
layer_one = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "Bottom", 100, NORMAL_MODE)
layer_two = 0


特別須注意之處
  • 接下來,主要修改之處,就是將 Scheme 的函數改成 Python 的函數。
  • (plug-in-gradmap ......) 改成 pdb.plug_in_gradmap(......)
  • 原本 Scheme code 參數值的指派方式是
(plug-in-gradmap RUN-NONINTERACTIVE img layer-two)
  • Python code 函數 pdb.plug_in_gradmap 參數值的指派
    • 第1個參數不是 RUN_NONINTERACTIVE
    • 第1個參數是 img
    • 第2個參數是 layer_two
    • 第3個參數是關鍵字參數(Keyword parameter)的形式,因此,可有可無,因為預設已是 RUN_NONINTERACTIVE 。
  • 因為 Gradient Map 原本就沒有圖形介面。
  • 改用高斯模糊濾鏡為例。
    • pdb.plug_in_gauss_iir(img, text_mask, blur_radius, 1, 1, run_mode=RUN_INTERACTIVE)
    • run_mode = RUN_INTERACTIVE,會出現濾鏡對話盒。
    • run_mode = RUN_NONINTERACTIVE,是預設的情況,不會出現濾鏡對話盒。