[Part I. GIMP基礎功]

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



12.7 以「製作畫框」為例,把「操作流程」變為程式碼

  • [須知4.寫作的習慣],以「畫框」為例,解說作者寫文章的習慣。一再強調,讀者明瞭作者的習慣,有助於文章的閱讀與學習 GIMP 的操作。
  • 而這種文章的呈現方式,也有利於快速撰寫出 Script-Fu 與 Python-Fu 的程式碼。


本節接續前一節的內容,並綜合這三節的內容



以「畫框」為例
  • 以兩欄的方式,解說「畫框」製作的過程,附加上「操作流程」對應的程式碼。
  • 有些操作步驟,並沒有附圖。若能一步一步操作GIMP,製作出「畫框」,讀者應能看懂其他的範例。
  • 附上 Script-Fu 與 Python-Fu 的程式碼,讓讀者體會程式碼的便捷之處。

畫框的製作細節,與所要放置的畫有關。

框架大小與相關參數的設定,要視實際情況而定。


新增圖層

產生一張黑色底色的新影像。





新增圖層,對應的 Python-Fu Code

# 畫框的尺寸
width = 106
height = 131

img = pdb.gimp_image_new(width, height, RGB)
bw_frame = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "bw_frame", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(img, bw_frame, 0)
pdb.gimp_display_new(img)
pattern_layer = 0

#將填滿黑色的動作併入下一段程式碼的 for 迴圈之內


產生黑白交替的邊框

執行[影像] / 選擇 / 全選 【註1】 , 執行[影像] / 選擇 / 縮小 【註2】 ,將選取區域往內退縮3個像素。將選取區域填上白色。

執行[影像] / 選擇 / 縮小 【註3】 ,再將選取區域往內退縮3個像素。

將選取區域填上黑色。

執行[影像] / 選擇 / 縮小 【註4】 ,再將選取區域往內退縮3個像素。將選取區域填上白色。

重複上述動作,產生黑白交替的邊框。


產生黑白交替的邊框,對應的 Python-Fu Code

# 前景色設為黑色,背景色設為白色
black = (0, 0, 0)
white = (255, 255, 255)
pdb.gimp_context_set_foreground(black)
pdb.gimp_context_set_background(white)

pdb.gimp_selection_all(img)

for i in range(0,3):
  #用前景色,塗滿黑色
  pdb.gimp_edit_fill(bw_frame, FOREGROUND_FILL)
  pdb.gimp_selection_shrink(img, 3)
  #用背景色,塗滿白色,留下外圍的黑色邊框
  pdb.gimp_edit_fill(bw_frame, BACKGROUND_FILL)
  pdb.gimp_selection_shrink(img, 3)


填滿 Parque #1 圖樣

新增一個圖層,名為pattern。

使用填色工具,在選項面版內 【註5】 ,「填滿類型」設填上圖樣,使用 Parque #1 ,將圖層填滿。


填滿 Parque #1 圖樣,對應的 Python-Fu Code

pdb.gimp_selection_all(img)

pattern_layer = pdb.gimp_layer_copy(bw_frame, TRUE)
pdb.gimp_image_add_layer(img, pattern_layer, -1)
pdb.gimp_layer_set_name(pattern_layer, "pattern")
pdb.gimp_image_set_active_layer(img, pattern_layer)

pdb.gimp_selection_all(img)
pdb.gimp_context_set_pattern("Parque #1")
pdb.gimp_edit_fill(pattern_layer, PATTERN_FILL)

pdb.gimp_selection_none(img)


產生立體的邊框

對Pattern圖層,執行[影像] / 濾鏡 / 映射 / 凹凸貼圖 【註6】 ,Bump map映射圖設為bw_frame圖層。其餘參數採用預設值。






產生立體的邊框,對應的 Python-Fu Code

bump_layer = bw_frame
azimuth = 135; elevation = 45; depth = 3
pdb.plug_in_bump_map(img, pattern_layer, bump_layer, azimuth, elevation, depth, 0, 0, 0, 0, True, False, 0)



完整的 Python-Fu Code ,與測試程式碼的功效
  • 啟動 GIMP Python Console
  • 將上面的程式碼,全部選取、複製、再貼到 Python Console 提示符號 >>> 之後,按下 Enter 。
  • 過一會,就會看到結果圖。

# 畫框的尺寸
width = 106
height = 131

img = pdb.gimp_image_new(width, height, RGB)
bw_frame = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "bw_frame", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(img, bw_frame, 0)
pdb.gimp_display_new(img)
pattern_layer = 0

# 前景色設為黑色,背景色設為白色
black = (0, 0, 0)
white = (255, 255, 255)
pdb.gimp_context_set_foreground(black)
pdb.gimp_context_set_background(white)

pdb.gimp_selection_all(img)

for i in range(0,3):
  #用前景色,塗滿黑色
  pdb.gimp_edit_fill(bw_frame, FOREGROUND_FILL)
  pdb.gimp_selection_shrink(img, 3)
  #用背景色,塗滿白色,留下外圍的黑色邊框
  pdb.gimp_edit_fill(bw_frame, BACKGROUND_FILL)
  pdb.gimp_selection_shrink(img, 3)

pdb.gimp_selection_all(img)

pattern_layer = pdb.gimp_layer_copy(bw_frame, TRUE)
pdb.gimp_image_add_layer(img, pattern_layer, -1)
pdb.gimp_layer_set_name(pattern_layer, "pattern")
pdb.gimp_image_set_active_layer(img, pattern_layer)

pdb.gimp_selection_all(img)
pdb.gimp_context_set_pattern("Parque #1")
pdb.gimp_edit_fill(pattern_layer, PATTERN_FILL)

pdb.gimp_selection_none(img)

bump_layer = bw_frame
azimuth = 135; elevation = 45; depth = 3
pdb.plug_in_bump_map(img, pattern_layer, bump_layer, azimuth, elevation, depth, 0, 0, 0, 0, True, False, 0)


選單及項目名稱的英文:
【註1】[Image] / Select / All
【註2】[Image] / Select / Shrink
【註3】[Image] / Select / Shrink
【註4】[Image] / Select / Shrink
【註5】Fill Type設Pattern fill,選Parque #1
【註6】[Image] / Filters / Map / Bump Map

關於註腳的功用請參看 1.9節