[Part I. GIMP基礎功]

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



10.6 圖解「圖層遮罩」與「漸層融合」的操作

  • 在此提醒讀者,之後的範例,圖層的操作,多不會詳細說明。
  • 本節之中,提供圖層融合的範例,讓讀者練習基本的操作技巧。


更多圖層操作的練習,可參考


操作圖層,有兩種的方式
  • 可在影像視窗內,也可在圖層面版內。
  • 有些功能必須在影像視窗內,例如,剪裁選擇區域。
  • 有些功能必須在圖層面版內,例如,「鎖定」圖層。
  • 操作圖層時,最重要的是選定所需的圖層。
  • 因此,在圖層面版內,操作相關的功能,會較直觀。
  • 可利用快捷鍵 Ctrl+L 來啟動圖層面版。


漸層混色工具的操作,可參考


兩圖層的融合

pencil 圖層
註,GIMP 是以棋盤方格來表示透明。
開啟鉛筆的影像檔,將圖層名稱更改為 pencil 。

這個鉛筆的圖案,是修改自鉛筆工具的圖示

讀者可下載下圖,作為練習用圖。

新增一圖層名為 radial 。

在混色工具的選項面版內【註1】 ,「形狀」項目設為放射狀,「重複」項目設為三角形波浪紋。

前景色設為黑色,背景色設為白色。此為預設值。

使用混色工具,以鉛筆的筆尖為中心點,向外拉一小段直線。

線段的長度決定,水波狀的圓形紋路的疏密。

為 radial 圖層新增遮罩。

在混色工具的選項面版內 【註2】 ,「形狀」項目設為放射狀,「重複」項目設為無。

前景色設為白色,背景色設為黑色。反轉預設值。

使用混色工具,以鉛筆的筆尖為中心點,向右下角拉一條直線。


radial 圖層
radial 圖層的遮罩


Background 圖層
新增一圖層名為Background,將此圖層填滿淡藍色。


將 radial 圖層的模式設為Grain extract,也可以試驗其它模式的效果。

也可以調整 radial 圖層的透明度,改變淡藍色背景透出的比例。





放射狀漸層的圖層遮罩,其外圍的黑色,讓圓形水波紋的外圍,漸漸變透明,讓radial 與 pencil 兩圖層的融合較自然。


選單及項目名稱的英文:
【註1】 Gradient設FG to BG (RGB),Shape設Radial,Repeat設Triangular wave
【註2】 Gradient設FG to BG (RGB),Shape設Radial,Repeat設None


等價的 Python-Fu 程式碼
  • 下面的程式碼,分成四部份:
    1. 首先,載入鉛筆圖案 pencil.png ,但不產生影像視窗
    2. 準備好新的影像,產生藍色背景的圖層
    3. pdb.gimp_blend(...) 產生圓形水波紋的圖層、產生放射狀漸層的圖層遮罩
    4. 調整鉛筆圖案至適當位置

# Part 1.
# 載入鉛筆圖案,有很多方法
# 方法 a. 使用 file_png_load ,設定正確的路徑
# img_pencil = pdb.file_png_load("/tmp/pencil.png", "")
# drw_pencil = pdb.gimp_image_get_active_layer(img_pencil)
# pdb.gimp_display_new(img_pencil)

# 方法 b. 直接透過網路,使用 file_uri_load ,載入圖檔到影像視窗內。
file_uri = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYY5zUkojyiwEjC1KsNHCx5Lm9oNIiXtvjWa4DNoPuymvcRAfaI-n2h6YpXHX6bKp8axqJdLnzT5Psds2Lrzt24yrh0Ewls8BZ7BuzYt0KMRTQRYkf4x56Oq93UEtk-gQp7cXlwThiWRPS/s400/pencil.png"
img_pencil = pdb.file_uri_load(file_uri, file_uri)
drw_pencil = pdb.gimp_image_get_active_layer(img_pencil)
pdb.gimp_drawable_set_name(drw_pencil, "pencil")
#pdb.gimp_display_new(img_pencil)


# Part 2.
# 圖片的尺寸
width = 240
height = 320
# 前景色設為黑色,背景色設為白色
black = (0, 0, 0)
white = (255, 255, 255)
pdb.gimp_context_set_background(black)
pdb.gimp_context_set_foreground(white)

img = pdb.gimp_image_new(width, height, RGB)
bg_layer = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "Background", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(img, bg_layer, 0)
# 底圖為藍色
sky_blue = (194, 226, 251)
pdb.gimp_context_set_background(sky_blue)
pdb.gimp_edit_fill(bg_layer, BACKGROUND_FILL)

pdb.gimp_display_new(img)


# Part 3.
radial_layer = pdb.gimp_layer_copy(bg_layer, TRUE)
pdb.gimp_image_add_layer(img, radial_layer, -1)
pdb.gimp_drawable_set_name(radial_layer, "radial")

radial_mask = pdb.gimp_layer_create_mask(radial_layer, ADD_ALPHA_MASK)
pdb.gimp_layer_add_mask(radial_layer, radial_mask)

start_x = width * 2 / 5
start_y = height * 2 / 5

pdb.gimp_context_set_foreground(black)
pdb.gimp_context_set_background(white)

pdb.gimp_blend(radial_layer, FG_BG_RGB_MODE, NORMAL_MODE, GRADIENT_RADIAL, 100, 0, REPEAT_TRIANGULAR, FALSE, FALSE, 0, 0, 0, start_x, start_y, start_x + 5, start_y + 5)

pdb.gimp_context_set_foreground(white)
pdb.gimp_context_set_background(black)

pdb.gimp_blend(radial_mask, FG_BG_RGB_MODE, NORMAL_MODE, GRADIENT_RADIAL, 100, 0, REPEAT_NONE, FALSE, FALSE, 0, 0, 0, start_x, start_y, start_x + 150, start_y + 150)

pdb.gimp_layer_set_mode(radial_layer, GRAIN_EXTRACT_MODE)


# Part 4.
non_empty = pdb.gimp_edit_copy(drw_pencil)
floating_sel = pdb.gimp_edit_paste(radial_layer, TRUE)
pdb.gimp_floating_sel_to_layer(floating_sel)
pdb.gimp_drawable_set_name(floating_sel, "pencil")
pdb.gimp_layer_set_offsets(floating_sel, start_x, start_y - 58)
# 調整鉛筆圖案至適當位置

  • 啟動 GIMP Python Console
  • 將前面的程式碼,依次序,全部選取、複製、再貼到 Python Console 提示符號 >>> 之後,按下 Enter 。
  • 過一會,就會看到結果圖,與其圖層結構,如下圖所示。