[Part I. GIMP基礎功]

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



顯示具有 第12章 手工打造與指令組合 標籤的文章。 顯示所有文章
顯示具有 第12章 手工打造與指令組合 標籤的文章。 顯示所有文章

12.1 圖文範例與指令組合,論手工打造的意義

本章目的
  • 第15章之後的範例,需要多些步驟,才能完成。
  • 為了讓你能夠打造特效更順手,先確定你已具備「Part I. 一種效果的誕生」的能力。



  • 本章目的,瞭解「操作流程」與「程式碼」之間的關係。



一種效果的誕生,其流程也可應用在照片上
  • 「Part II. 一種效果的誕生」的範例,以照片來解說範例,比例算是低的。少了一張張美美的照片,因此,看起來,比較不吸引讀者。
  • 其實,從「文字效果」學到的任何技巧,都可以作用在合適的照片上。因此,第15章之後,重點是學習「製造效果的流程」。這流程,在 GIMP 中,可以轉換為 Script-Fu 或 Python-Fu 程式碼。


手工打造 vs. Script-Fu
  • 手工打造文字特效,是費時的。因此,若要將學會的文字特效,應用於商業,顯得不敷成本。
  • 在「檔案 / Create / Logos」選單內的功能,是屬於 Script-Fu 。

  • Logos 選單,提供眾多的文字特效。



有趣的圖樣
  • 「檔案 / Create / Patterns」選單,提供一些有趣的圖樣 。
  • 還有些圖樣,位於「濾鏡 / 描繪」選單內,例如,Solid Noise 。


Clothify 濾鏡
  • 可讓影像浮現布料的紋理、衣服的材質。
  • 也可視為一種圖樣。
  • 位於「濾鏡 / 藝術效果」選單內。
  • 雖然在「濾鏡」選單內,但它是 Script-Fu 程式。
若想要更瞭解 Clothify 濾鏡

手工打造 vs. Script-Fu,以布料紋理為例


手工打造纖維紋路,以下沒有解說圖,只有操作步驟:
  • 新增長寬256x256、背景白色的影像。
  • 將圖層更名為 horizontal 。
  • 執行[影像] / 濾鏡 / 雜色 / RGB Noise,不勾選 Independent RGB 項目,紅、綠、藍都設1.0,產生灰色的雜點。
  • 複製 horizontal 圖層,得到一個新的圖層,將它更名為 vertical 。
  • 對 horizontal 圖層,執行[影像] / 濾鏡 / 模糊化 / Tileable Blur,半徑設 48,不勾選垂直方向模糊化,勾選水平方向模糊化,模糊方式選 RLE 。
  • 對 vertical 圖層,執行[影像] / 濾鏡 / 模糊化 / Tileable Blur,半徑設 48,勾選垂直方向模糊化,不勾選水平方向模糊化,模糊方式選 RLE 。
  • 以正片叠底(Multiply)模式,重疊兩圖層。重疊顯示的影像,顏色較深。
  • 執行圖片平面化,合併兩個圖層。


手工打造纖維紋路,clothify.scm 最重要的程式碼:
  • (plug-in-noisify RUN-NONINTERACTIVE img layer-one FALSE 0.7 0.7 0.7 0.7)
  • (set! layer-two (car ( GIMP -layer-copy layer-one 0)))
  • ( GIMP -layer-set-mode layer-two MULTIPLY-MODE)
  • ( GIMP -image-add-layer img layer-two 0)
  • (plug-in-gauss-rle RUN-NONINTERACTIVE img layer-one bx TRUE FALSE)
  • (plug-in-gauss-rle RUN-NONINTERACTIVE img layer-two by FALSE TRUE)
  • ( GIMP -image-flatten img)


手工打造的意義
  • 手工打造文字特效是費時的。同樣地,手工打造材質、圖案或紋理也是費時的。因此,手工打造特效的意義,主要是練習操作 GIMP 。
  • 在練習的過程中,體驗指令的組合、濾鏡的混用、面版的操作,體驗一種新的效果的誕生。而後,可將學來的技巧用來潤飾人像、風景照。
  • 此外,熟練了中文版的 GIMP 之後,可試著操作英文版的 GIMP ,而後閱讀「scripts」目錄內的 scm 檔,可以試著組合 GIMP 的函式、撰寫 Script-Fu 或 Python-Fu 程式,可將自創的效果寫成程式,讓效果自動生成。

12.2 背景與Background,名稱為英文的優點

名稱為「背景」代表的意義
  • 操作中文版的 GIMP 時,新增一張圖片後,其圖層名稱為「背景顏色」,而且是粗體字,粗體字表示「只有紅綠藍色版沒有透明色版」。

  • 執行[影像] / 檔案 / 新增,若此時背景顏色為白色,在對話盒內將「填色」設為前景顏色,則會產生一張白色底色的影像。


中文名稱的困擾
  • 既然是「影像處理」,起頭時,通常都要新增影像或開啟影像。
  • 若影像只有一個圖層,通常圖層的名稱是 Background 或「背景顏色」。
  • 若要處理多個圖層一定要會操作圖層面版。


多年前的作品,改寫後,仍用英文「Background」
  • Part II. 一種效果的誕生,第15章至第20章的範例,都是多年前的作品,如今只是改用中文版的 GIMP 2.6版來解說。
  • 當初,是用英文版的 GIMP 1.2版,因此,這些範例的「Background」圖層,相當於「背景顏色」圖層或「背景」圖層。
  • 雖然這是中文的軟體教學的文章,但文章中的圖層名稱,仍維持英文。這樣會有個優點就是,閱讀文章時,讀到英文的圖層名稱,較容易判斷,它是一個圖層。


名稱為英文的優點
  • 以下用「畫框」範例的最後一個步驟,來體驗這個優點。
對 pattern 圖層,執行[影像] / 濾鏡 / 映射 / 凹凸貼圖,Bump map映射圖設為 bw_frame 圖層,其餘參數採用預設值。
  • 由前例的文句,英文都代表某種可操作的物件,因此操作 GIMP 時,很容易就明瞭 pattern 與 bw_frame 的身份及目的為何。

12.3 填色工具與填色指令,同功異式的叮嚀

填色工具操作的小細節,還可參考:


即使是填圖這樣簡單的功能,也要注意很多小細節
  • 可以填上前景色、填上背景色、填上圖樣,因此,先確定是填色,還是填圖。
  • 若要「填上圖樣」,首先,選定欲填充的圖樣。
  • 其次,產生選取區域。
  • 若沒有選取區域,則會填滿整個圖層。


選單內的指令,填色、填圖


  • 「編輯」選單內,填色、填圖指令:
    • 填上前景顏色 Ctrl+,
    • 填上背景顏色 Ctrl+.
    • 填上圖樣 Ctrl+;


填色的同功異式
  1. 可使用快捷鍵來完成填色、填圖。
  2. 「編輯」選單內,填色、填圖的三個指令,相當於填色工具。
  3. 填色工具的選項面版內,提供了許多填色的方式與彈性。


以「填色」工具,填滿圖樣
  • 欲在矩形區域內,填滿 Pine 圖樣。
  • 填色工具的游標,是顏料桶。
  • 用游標,單擊矩形區域的內部,即完成填色的操作。



填色工具的小技巧:
  • 填色工具的小圖示是顏料桶 。
  • 在選項面版內,可直接選定欲填充的圖樣。
  • 預設,選項面版是嵌合在工具箱之下。若找不到選項面版,雙擊工具按鈕,就會出現。

12.4 圖文對照與兩欄呈現,解說製作的流程

熟知文章寫作的風格


熟知基本功能的操作

12.5 以「新增圖層」為例,把「操作流程」變為程式碼

本節內容,綜合這三節
  • 下面這一段文字,在「12.2節」已經出現過。


GIMP 視窗介面,「新增圖層」的「操作流程」
  • 操作中文版的 GIMP 時,新增一張圖片後,其圖層名稱為「背景顏色」,而且是粗體字,粗體字表示「只有紅綠藍色版沒有透明色版」。

  • 執行[影像] / 檔案 / 新增,若此時背景顏色為白色,在對話盒內將「填色」設為前景顏色,則會產生一張白色底色的影像。


等價的 Python-Fu 程式碼

width = 640
height = 400
#----新增「空的」圖層,至少要三個步驟----
#Step 1. 新增影像物件
img = pdb.gimp_image_new(width, height, RGB)

#Step 2. 新增圖層物件
layer_one = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "背景顏色", 100, NORMAL_MODE)

#Step 3. 將圖層物件加入影像物件
pdb.gimp_image_add_layer(img, layer_one, 0)

pdb.gimp_display_new(img)

#----填上特定顏色,在指定的範圍內,至少要三個步驟----
#Step 1. 設定背景顏色為白色
white = (255, 255, 255)
pdb.gimp_context_set_background(white)

#因為是作用在全新的圖層,因此這個步驟可省略
#Step 2. 指定作用的區域
#pdb.gimp_selection_all(img)

#Step 3. 使用繪圖工具,著色、填圖、或描繪
pdb.gimp_edit_fill(layer_one, BACKGROUND_FILL)

  • 把上面的程式碼,貼到 GIMP Python Console 提示符號 >>> 之後。
  • 而後,就會產生一張 640 x 400 白色底色的影像。

12.6 以「填色填圖」為例,把「操作流程」變為程式碼

本節內容,綜合這三節

  • 下面這一段圖文敘述,在「12.3節」已經出現過。


GIMP 視窗介面,「以填色工具填滿圖樣」的「操作流程」
  • 欲在矩形區域內,填滿 Pine 圖樣。
    1. 新增 256 x 128 白底的影像。
    2. 使用矩形選取工具,框出填圖的範圍。
    3. 設定填色工具的選項,其中,最重要的選項是,選擇Pine 圖樣。
    4. 填色工具的游標,是顏料桶。用游標,單擊矩形區域的內部,即完成填色的操作。



等價的 Python-Fu 程式碼

width = 256
height = 128
#----新增「空的」圖層,至少要三個步驟----
#Step 1. 新增影像物件
img = pdb.gimp_image_new(width, height, RGB)

#Step 2. 新增圖層物件
layer_one = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "背景顏色", 100, NORMAL_MODE)

#Step 3. 將圖層物件加入影像物件
pdb.gimp_image_add_layer(img, layer_one, 0)

pdb.gimp_display_new(img)

#----填上特定顏色,在指定的範圍內,至少要三個步驟----
#Step 1. 設定背景顏色為白色
white = (255, 255, 255)
pdb.gimp_context_set_background(white)

#因為是作用在全新的圖層,因此這個步驟可省略
#Step 2. 指定作用的區域
#pdb.gimp_selection_all(img)

#Step 3. 使用繪圖工具,著色、填圖、或描繪
pdb.gimp_edit_fill(layer_one, BACKGROUND_FILL)

  • 把上面的程式碼,貼到 GIMP Python Console 提示符號 >>> 之後。
  • 而後,就會產生一張 256 x 128 白色底色的影像。


#----填上特定圖樣,在指定的範圍內,至少要三個步驟----
#Step 1. 指定圖樣
pdb.gimp_context_set_pattern("Pine")
#Step 2. 設定選取範圍
pdb.gimp_rect_select(img, 32, 30, 108, 90, 0, TRUE, 4)
#Step 3. 填上圖樣
#pdb.gimp_edit_fill(layer_one, PATTERN_FILL)
pdb.gimp_bucket_fill(layer_one, PATTERN_BUCKET_FILL, NORMAL_MODE, 100, 15, FALSE, 0, 0)

  • 把上面的程式碼,貼到 GIMP Python Console 提示符號 >>> 之後。
  • 而後,就會在矩形區域內,填滿 Pine 圖樣。
  • 下圖是 pdb.gimp_bucket_fill() 的效果。



gimp-edit-fill vs. gimp-bucket-fill
  • 有選取區域時,這兩個函數的效果,是不一樣的。
  • 下圖是 pdb.gimp_edit_fill() 的效果。

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節。