[Part I. GIMP基礎功]

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



顯示具有 第10章 濾鏡的簡單應用 標籤的文章。 顯示所有文章
顯示具有 第10章 濾鏡的簡單應用 標籤的文章。 顯示所有文章

10.1 濾鏡的通則

本章目的
  • 圖片解說常用的濾鏡。
  • 解釋濾鏡視效的原由。
  • 組合兩三個濾鏡,產生邊框效果。



濾鏡的分類
  • 濾鏡在選單中已經,分了好幾類,例如,模糊的濾鏡、銳利化的濾鏡。
  • 藉由瞭解濾鏡的本質與特性,有助於分類眾多的濾鏡,有助於自修單一濾鏡的效果。
  • 本章提供一些想法,來分析眾多濾鏡的效果。
    • 直覺 + 分析
    • 邊緣效果
    • 邊框效果
    • 焦點集中的強化效果
    • 邊緣接縫的特性


濾鏡的第一準則
  • 有一類型的濾鏡,用錯地方,便無法執行,或者更糟,產生的效果,讓人覺得,一無是處。
  • 正確的濾鏡,用在正確的構圖,是一條很重要的準則。
  • 這需要美感的直覺與經驗的累積。
  • 有些濾鏡的效果,不易精準地控制,因此,需要更多的練習。


濾鏡的通則
  • 濾鏡的效果,會侷限在選取區域內,若沒有選取區域,則會擴及整個影像。
  • 濾鏡的效果,通常,只作用於正在使用的單一圖層。
  • 執行完某一濾鏡後,該濾鏡的名稱,會自動移到「濾鏡」選單的第一行,方便重複執行,按下Alt+F鍵,亦可重複套用該濾鏡的效果。
  • 重複執行時,若想更改參數,按下Shift+Alt+F鍵,可啟動該濾鏡的對話盒。
  • 有些濾鏡的對話盒,有預覽視窗,可立即反應調整參數後的影響。在預覽視窗之中,可用滑鼠拖曳,調整預視的位置。
  • 濾鏡尚未執行完畢前,按下影像視窗右下角的「取消」按鈕,可以終止濾鏡的執行。
  • 幾乎所有的濾鏡都可在RGB模式下執行。
  • 大部分的濾鏡,無法在索引色模式下執行,必須先將圖檔轉為RGB模式,方可執行該濾鏡。
  • 參數的設定,需配合影像的大小及解析度,做適當的調整,對於尺寸較大的影像,需給予較大的值。
  • 切記!濾鏡不是萬能的,需配合影像的特點與構圖來使用。如果影像已經很完美了,原原本本呈現出來,就可以了。

10.2 濾鏡背後的數學原理

大哉問
  • 如何組合濾鏡?如何應用濾鏡?GIMP濾鏡五花八門,數目太多了,因此這是「大哉問」!從別人的作品學習是不錯的方法。當然本站的文章,也提供了很多濾鏡的範例。


知之為知之 vs. 不知為知之
  • 知之為知之 :
    • 瞭解濾鏡背後的數學原理或基本的運作規則,應該是較能發揮濾鏡的特效。
    • 只是學海無涯,濾鏡的原理有很多硬知識,很難速成!
  • 美感直覺 + 試驗精神 :
    • 很多時候,許多特效都是試出來的!
    • 我很佩服有藝術天份的人,很多時候,他們使用濾鏡是不細究濾鏡背後的數學原理,憑直覺來運用濾鏡,卻總能發揮濾鏡特效之奇,創造驚喜。


依複雜的程度,對GIMP的濾鏡做分類:
  1. 簡單但須作用於合適的影像:
    • 濾鏡效果雖然很炫,但總要適得其所。
    • 玻璃磚片濾鏡、透鏡效果作用於風景照片,有時得到的效果只能說還好。
    • 玻璃磚片濾鏡作用於色塊明顯或色澤鮮艷的影像,可得到較好的視效。
    • 透鏡效果濾鏡作用於正方形的影像,可得到正圓形的形變效果。
  2. 簡單但很重要:
    • 如,高斯模糊、邊緣、RGB Noise、凹凸貼圖濾鏡。
    • 這些濾鏡,是建構許多複雜效果的基礎。
  3. 簡單但用途不很明顯:
    • 如,迷宮、棋盤、格線、百葉窗濾鏡,其效果一目瞭然。
    • 但有何特殊的用途,則須要用戶自己發揮創意與想像。
  4. 複雜但介面清楚明瞭:
    • 如,GIMPressionist濾鏡、Filter Pack濾鏡。
    • 這兩個濾鏡,其參數雖多,但預覽視窗設計良好,可以立即體會參數變化後的效果。
    • GIMPressionist 是GIMP + impressionist,也就是GIMP印象派畫家。
    • Filter Pack 就是一整套色彩調整的濾鏡組合。
  5. 複雜但知悉其數學理論就能明瞭:
    • 矩陣運算(Convolution Matrix):若知道數學原理,這是個很簡單的濾鏡,Convolution表示卷積、迴旋積的數學運算,對一張二維的影像執行空間迴旋積的運算,相當於在頻率域進行濾波。在一維的訊號處理中,平均運算相當於低通濾波,訊號變平緩;差分運算相當於高通濾波,訊號變劇烈。對於二維影像,低通濾波讓影像變模糊;高通濾波讓影像變銳利,甚至出現雜點。二維影像有兩個方向,因此高通與低通有多種組合的方式。
    • Fractal Trace(碎形輪廓):如果懂得Mandelbrot Set的原理,這濾鏡就簡單多了。Fractal Trace濾鏡將影像扭曲出Mandelbrot Set的邊緣輪廓。


例證:就算不完全瞭解原理,也會使用

「套用透鏡效果」濾鏡,位於「濾鏡/ 光影」選單內。
測試透鏡效果濾鏡,使用的原始圖案為一張風景照,長寬為256x192。
透鏡效果濾鏡會產生凸透鏡的折射變形。




例證:原理與運用之處,可能無關

先產生一張底色為灰階192的影像,再執行[影像] / 濾鏡 / 扭曲 / 報紙印刷濾鏡 【註1】 ,紅、綠、藍三個分量的角度預設值為15、75、0,因此出現三種顏色的的圓點。若三個角度值都設相同,則會出現規則的黑色圓點。
而後,可利用「報紙印刷濾鏡」的圓狀效果來做其它的應用。

下圖是報紙印刷濾鏡的對話盒。


報紙印刷濾鏡(Newsprint)相當於PhotoShop的Color Halftone濾鏡。主要用於印前處理(prepress),用於檢視影像轉換為網點印刷品的視效為何。對於解析度較高的影像,報紙印刷濾鏡可用於預視網點印刷的效果。對於解析度較低的影像,報紙印刷濾鏡可用於製造斑點或條紋的效果。

有的使用者天生有很強烈的美術直覺,不需要知道印刷套色的運作原理,只要測試幾次不同的參數效果,就能將「報紙印刷濾鏡」運用得恰到好處。

善用濾鏡可製作出許多引人注目的效果。濾鏡之使用,另一個有趣之處,誘發其設計的原因與其運用之處,總是無關。因此,「報紙印刷濾鏡」不一定要用來檢視套色效果。


前述範例中,選單及項目名稱的英文:
【註1】 [Image] / Filters / Distorts / Newsprint


例證:很容易理解,只是要做何應用

玻璃磚片濾鏡,位於「濾鏡 / 光影」選單內。
測試玻璃磚片濾鏡,使用的原始圖案為Abstract 3的漸層圖案,長寬為256x128。
玻璃磚片濾鏡讓光線折射,造成色塊聚集或散開。



例證:原理很深,可視為一種特殊形變的濾鏡

Fractal Trace濾鏡,位於「濾鏡 / 映射」選單內。
測試Fractal Trace濾鏡,使用的原始圖案為全白的影像,長寬為256x256像素。在Fractal Trace對話盒內,將「Outside Type」設為黑,將「Mandelbrot參數」調成與Fractal Explorer濾鏡的預設值相同,即「X1 X2 Y1 Y2:-2、2、-1.5、1.5」,深度設10,產生黑白雙色的Mandelbrot Set。「深度」越大,越像Mandelbrot Set,原本全白的影像所受的扭曲越嚴重。


繼續測試Fractal Trace濾鏡,使用的原始圖案為Abstract 3的漸層圖案,長寬為256x256。


在Fractal Trace對話盒內,參數為預設值。實際應用時,為了要呈現扭曲邊緣的美感,「深度」不能設太大。



例證:原理很深,可視為各種頻段的濾波器

「矩陣運算」濾鏡,位於「濾鏡 / 一般性」選單內。
若不瞭解濾鏡背後的數學原理,無法望文生義,無法使用此濾鏡。
「一般性」是只指濾波的頻段,可設定成高通、低通、帶通、及其它形式。
在「矩陣運算」的對話盒內,設定矩陣元素的數值,此迴旋積運算將使得影像變銳利,相當於高通濾波,影像會出現些微的雜紋、斑點。


下圖比較執行「矩陣運算」前後的影像。

10.3 圖解「凹凸貼圖」與「報紙印刷」的操作

  • 凹凸貼圖濾鏡,位於「濾鏡 / 映射」選單內。
  • 報紙印刷濾鏡,位於「濾鏡 / 扭曲」選單內。


參數設定的解說
  • 之後的範例,多只用文字,描述濾鏡參數的設定方式,而不會有對話盒的附圖。
  • 本節以圖片說明,凹凸貼圖與報紙印刷對話盒的操作方式。


以「畫框」範例的最後步驟,解說凹凸貼圖濾鏡

pattern圖層


bw_frame圖層

  • 影像檔frame.xcf有pattern與bw_frame兩個圖層。
  • 對pattern圖層,執行凹凸貼圖濾鏡,Bump map映射圖設為bw_frame圖層。其餘參數採用預設值。


測試凹凸貼圖濾鏡
  • 「凹凸貼圖」濾鏡的英文名稱為「Bump Map」,此濾鏡最重要的參數是「Bump map」,要選定一個圖層作為映射圖,映射圖決定了凹陷、凸起的位置與份量。



測試報紙印刷濾鏡,要有灰色的影像
  • 產生128x128新影像。
  • 將影像填上(192,192,192)的灰色。
  • 以下,使用這張灰色的影像,測試報紙印刷濾鏡。



在報紙印刷濾鏡的對話盒內,點選 Intensity 選項
  • 對於灰階影像,可點選 Intensity 選項。
  • 描繪斑點函式設為圓形。



在報紙印刷濾鏡的對話盒內,點選 CMYK 選項
  • 有四個分頁「氰藍、洋紅、黃、黑」的參數要設定。
  • 因為有黑色分量,因此,能表現出規則的白色圓點。



在報紙印刷濾鏡的對話盒內,點選 RGB 選項
  • 有三個分頁「紅、綠、藍」的參數要設定。
  • 若將三個角度值設相同,則出現規則的黑色圓點。
  • 紅、綠、藍三個分量的角度參數,預設值為15、75、0。
  • 因此,出現三種顏色的的圓點,如下圖所示。



測試報紙印刷濾鏡,要有模糊的區域
  • 新增長寬128x128的影像,中間填上純黑色。
  • 執行「報紙印刷濾鏡」,黑色區域無法產生斑點。

  • 執行「高斯模糊濾鏡」,模糊半徑設10。




  • 再執行「報紙印刷濾鏡」,紅綠藍三個分頁的參數設相同。







測試「凹凸貼圖」濾鏡,等價的 Python-Fu 程式碼



測試「報紙印刷」濾鏡,等價的 Python-Fu 程式碼
  • 因為測試用的影像,與前面的圖,略微有些不同,結果也略微不同。
  • 下圖為 Python Code 所產生的測試用的影像。

  • 下面的程式碼,分成兩部份:
    1. 產生測試用的影像
    2. 測試報紙印刷濾鏡

# Part 1. 產生測試用的影像
width = 128; height = 128
img = pdb.gimp_image_new(width, height, RGB)
drw = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "Background", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(img, drw, 0)
pdb.gimp_display_new(img)
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
# 白色底圖
pdb.gimp_context_set_background(white)
pdb.gimp_selection_all(img)
pdb.gimp_edit_fill(drw, BACKGROUND_FILL)
# 1 px 紅色外框線
pdb.gimp_context_set_brush("Circle (03)")
pdb.gimp_context_set_foreground(red)
pdb.gimp_selection_shrink(img, 3)
pdb.gimp_edit_stroke(drw)
pdb.gimp_selection_none(img) #釋放選取區域
# 中央的黑色方塊
pdb.gimp_context_set_foreground(black)
pdb.gimp_selection_all(img)
pdb.gimp_selection_shrink(img, 27)
pdb.gimp_edit_fill(drw, FOREGROUND_FILL)
pdb.gimp_selection_none(img)

# Part 2. 測試報紙印刷濾鏡
# 連續施加兩種濾鏡的效果
blur_radius = 10
cell_size = 10
pdb.plug_in_gauss_iir(img, drw, blur_radius, 1, 1)
pdb.plug_in_newsprint(img, drw, cell_size, 0, 0, 45.0, 3, 45.0, 0, 45.0, 0, 45.0, 0, 3)

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

10.4 圖解「色彩平衡」與「黑白兩極」的操作

  • 本節說明色彩平衡與界限值對話盒的操作方式。
  • 色彩平衡指令、界限值指令,都位於「色彩」選單內。


色彩平衡對話盒
  • 可個別調整影像的陰影區域、半調色區域、高亮度區域的色彩。
  • 色彩平衡是最直覺的顏色調整工具。
  • 根據色相環的顏色排列方式,來增加或減少某個顏色分量。
  • 色相相差180度的顏色為互補色。
  • 增加紅色則會降低青色,增加青色會降低紅色。
  • 要增加紅色亦可藉由增加洋紅色與黃色來完成。



色彩平衡對話盒,操作三步驟:
  1. 點選陰影區域(Shadows)、半調色區域(Mid tones)、高亮度區域(Highlights)狀態按鈕中的某一個,決定一個你要調整的色調範圍。
  2. 勾選「保留亮度」(Preserve Luminosity),以保持明度值不隨顏色變化而改變,這選項可保持影像中色調的平衡。
  3. 拖曳滑桿靠近想要增加的顏色;或是拖曳滑桿遠離想要減少的顏色。


從灰階字體到螢光字體
  • 以下,利用灰階的立體字,練習色彩平衡對話盒的操作,製作螢光的字體。
灰階的立體字。

立體字呈現黃色。
執行[影像] / 色彩 / 色彩平衡【註1】,陰影、半色調、高亮度三個區域的設定皆相同為,紅色增加100%、綠色增加100%、藍色減少100%。

立體字呈現藍色。
執行[影像] / 色彩 / 色彩平衡【註2】,陰影、半色調、高亮度三個區域的設定皆相同為,紅色減少100%、綠色減少100%、藍色增加100%。

立體字呈現晚霞的顏色。
執行[影像] / 色彩 / 色彩平衡【註3】,陰影區域的設定為紅色增加100%、綠色增加100%、藍色減少100%;半色調區域的設定為紅色減少100%、綠色減少100%、藍 色增加100%;高亮度區域的設定為紅色增加100%、綠色減少100%、藍色減少100%。


黑白兩極
  • 界限值(Threshold)指令,可以將彩色與灰階影像,轉換為黑白兩色的影像。
  • 可在文字框內,鍵入數值,決定界限值範圍(Threshold Range)。
  • 也可用滑鼠拖曳,圈選著一段直條圖區域,以此設定界限值範圍。
  • 在界限值範圍內的色階的像素,都會變為白色的像素。
  • 在界限值範圍外的色階的像素,都會變為黑色的像素。

 


從灰階雲霧到黑白色塊
  • 以下,利用灰階的雲霧圖,練習界限值對話盒的操作。
執行[影像] / 濾鏡 / 描繪 / 雲狀 / Solid Noise 【註4】 ,使用預設的參數值,產生灰階霧狀的效果 。
執行[影像] / 色彩 / 界限值 【註5】,界限值範圍設127到255,此為預設的參數值。


選單及項目名稱的英文:
【註1】[Image] / Colors / Color Balance,
點選Shadows狀態按鈕,Color Levels選項Red設100、Green設100、Blue設-100;
點選Mid tones狀態按鈕,Red設100、Green設100、Blue設-100;
點選Highlights狀態按鈕,Red設100、Green設100、Blue設-100
【註2】[Image] / Colors / Color Balance,
點選Shadows狀態按鈕,Red設-100、Green設-100、Blue設100;
點選Mid tones狀態按鈕,Red設-100、Green設-100、Blue設100;
點選Highlights狀態按鈕,Red設-100、Green設-100、Blue設100
【註3】[Image] / Colors / Color Balance,
點選Shadows狀態按鈕,Red設100、Green設100、Blue設-100;
點選Mid tones狀態按鈕,Red設-100、Green設-100、Blue設100;
點選Highlights狀態按鈕,Red設100、Green設-100、Blue設-100
【註4】[Image] / Filters / Render / Clouds / Solid Noise
【註5】[Image] / Colors / Threshold


測試「色彩平衡」的功能,等價的 Python-Fu 程式碼
  • 下面的程式碼,分成兩部份:
    1. pdb.file_uri_load(...) 載入 Super 立體字
    2. pdb.gimp_color_balance(...) 調色,產生黃色、藍色、紅色的效果

# Part 1. 準備好原始的影像,並且複製 3 份
# 指定 uri 載入 Super 立體字
file_uri = "http://docs.google.com/File?id=ddjc5r5d_410dwtdxgfz_b"
img = pdb.file_uri_load(file_uri, file_uri)
drw = pdb.gimp_image_get_active_layer(img)
pdb.gimp_drawable_set_name(drw, "Text")
pdb.gimp_display_new(img) # 顯示灰階的立體字

img1 = pdb.gimp_image_duplicate(img)
img2 = pdb.gimp_image_duplicate(img)
img3 = pdb.gimp_image_duplicate(img)
drw1 = pdb.gimp_image_get_active_layer(img1)
drw2 = pdb.gimp_image_get_active_layer(img2)
drw3 = pdb.gimp_image_get_active_layer(img3)

# Part 2. 調色
# 調色,讓立體字呈現黃色
pdb.gimp_color_balance(drw1, 0, TRUE, 100, 100, -100)
pdb.gimp_color_balance(drw1, 1, TRUE, 100, 100, -100)
pdb.gimp_color_balance(drw1, 2, TRUE, 100, 100, -100)
pdb.gimp_display_new(img1) # 顯示黃色的立體字

# 調色,讓立體字呈現藍色
pdb.gimp_color_balance(drw2, 0, TRUE, -100, -100, 100)
pdb.gimp_color_balance(drw2, 1, TRUE, -100, -100, 100)
pdb.gimp_color_balance(drw2, 2, TRUE, -100, -100, 100)
pdb.gimp_display_new(img2)

# 調色,讓立體字呈現晚霞的顏色
pdb.gimp_color_balance(drw3, 0, TRUE, 100, 100, -100)
pdb.gimp_color_balance(drw3, 1, TRUE, -100, -100, 100)
pdb.gimp_color_balance(drw3, 2, TRUE, 100, -100, -100)
pdb.gimp_display_new(img3)



測試「黑白兩極」的功能,等價的 Python-Fu 程式碼
  • 下面的程式碼,分成兩部份:
    1. pdb.file_uri_load(...) 載入「雲霧圖」
    2. pdb.imp_threshold(...) 產生黑色塊與白色塊的效果

# 指定 uri 載入 雲霧圖
file_uri = "http://docs.google.com/File?id=ddjc5r5d_415hg55svts_b"
img = pdb.file_uri_load(file_uri, file_uri)
drw = pdb.gimp_image_get_active_layer(img)
pdb.gimp_drawable_set_name(drw, "Solid Noise")
pdb.gimp_display_new(img)
pdb.gimp_threshold(drw, 127, 255)

10.5 圖解「扭曲形變」與「Math Map」的操作

Math Map的網頁為:
http://www.complang.tuwien.ac.at/schani/mathmap/
請自行上網下載Math Map並安裝。


安裝 Math Map
我下載的檔案為mathmap-1.2.4-win32.zip,將zip檔解壓縮後,將「mathmap」資料夾複製一份放入「.gimp-2.6」資料夾內。


將「plug-ins」裡的三個檔案放入「.gimp-2.6\ plug-ins」資料夾內。


重新啟動GIMP就會多了一個「MathMap」子選單。



功能強大,只示範 Sea 濾鏡
  • MathMap的功能強大,包含許多濾鏡,可以將影像扭曲形變,製作許多有趣的特效與動畫。
  • Sea濾鏡只是MathMap的一個功能,此濾鏡可製造出略微不規則的波浪,這樣的波浪效果較自然些。

  • 使用藍底白線的圖案來示範Sea濾鏡。


  • 執行[影像] / 濾鏡 / 一般性 / Math Map / Distorts / Sea 【註2】,Sea 濾鏡的對話盒有兩個分頁。
  • 在「Settings」分頁,Parameter t設1,Edge Behaviour設Reflect,其餘使用預設值。


  • 在「User Values」分頁,amp1設0.148,amp2設0.010,wv設12.94。

10.7 邊緣與邊框的強化效果

強化效果的運用邏輯
  • 觀看背景單純的圖案或去除背景的圖案,很容易就看出該影像的重點與內容為何。有時候,去除背景並不是一件容易完成的工作。
  • 將影像外圍的圖色弄淡或弄模糊,也可提醒觀看的人該影像的重點。
  • 為影像添加上一個邊框,也具有聚焦的效果,可讓影像的主體較突出。

  • GIMP已內建一些濾鏡與Script-Fu可製作邊緣與邊框的強化效果,以下使用汽車的影像來做示範。



請看我,我就是焦點
  • 執行[影像] / 濾鏡 / 描繪 / Line Nova 【註1】
    • 產生超新星發射光線的效果。
    • 其發散的線條顏色,取決於前景顏色的設定。
    • 將顏色設為紅色
    • 車子被一圈發散的線條圍繞。
    • 因此,視線很自然地就聚焦於車子上。


  • 執行[影像] / 濾鏡 / 裝飾 / Fuzzy Border 【註2】 ,模糊的邊框可以降低背景零亂的觀感,讓畫面的主體再突出一些。



選單及項目名稱的英文:
【註1】[Image] / Filters / Render / Line Nova
【註2】[Image] / Filters / Decor / Fuzzy Border


邊框效果,等價的 Python-Fu 程式碼
  • 由於,直接使用 GIMP 內建的函數,產生邊框效果,因此,下面的程式碼,很簡短。
  • 下面的程式碼,使用 pdb.file_uri_load(...) 載入汽車的影像
  • 下面的程式碼,分成兩部份:
    1. pdb.script_fu_line_nova(...) 產生超新星發射光線的效果
    2. pdb.script_fu_fuzzy_border(...) 產生模糊的邊框

# Part 1. 超新星發射光線的效果
# 指定 uri 載入車子影像
file_uri ="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUbnU1QqJ_9WrDdQhthFVLcYH7ybj1ZrgO-e2jHPNembf-tIglTPZjNU7blMGyW8fYQeWX5KSH9sDkeeK2Hb-VY0liEOaofvCDKwogu7XB06Hx6hZkiGgL0NdfB0ajrz-J_79cOY3MgSqf/s400/12_01_01.jpg"
img_car = pdb.file_uri_load(file_uri, file_uri)
drw_car = pdb.gimp_image_get_active_layer(img_car)
pdb.gimp_display_new(img_car)

# Line Nova 發散的線條顏色,取決於前景顏色的設定
red = (255, 0, 0)
pdb.gimp_context_set_foreground(red)
pdb.script_fu_line_nova(img_car, drw_car, 200, 1.0, 100, 30)

# Part 2. 模糊的邊框
# 指定 uri 載入車子影像
file_uri ="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUbnU1QqJ_9WrDdQhthFVLcYH7ybj1ZrgO-e2jHPNembf-tIglTPZjNU7blMGyW8fYQeWX5KSH9sDkeeK2Hb-VY0liEOaofvCDKwogu7XB06Hx6hZkiGgL0NdfB0ajrz-J_79cOY3MgSqf/s400/12_01_01.jpg"
img_car = pdb.file_uri_load(file_uri, file_uri)
drw_car = pdb.gimp_image_get_active_layer(img_car)
pdb.gimp_display_new(img_car)
cyan = (0, 255, 255)
pdb.script_fu_fuzzy_border(img_car, drw_car, cyan, 16, TRUE, 4.0, FALSE, 100, TRUE, TRUE)
# 最終,會產生新的影像視窗,來呈現 Fuzzy Border 的效果

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 。
  • 過一會,就會看到結果圖,與其圖層結構,如下圖所示。