- 只要能替物體去除背景,就能得到物體輪廓的剪影。
- 物體輪廓的剪影,妙用無窮,最主要,還是用來凸顯主體本身。
- 接續前一節,以下示範火燄效果,原理是利用長頸鹿的剪影,製作出灰階的外燄、灰階的內燄。
- 載入的圖片,之後,是要透過 Python Code 來潤飾影像。
- a. 可以手動下載本網頁上的「長頸鹿」圖片,而後,透過 GIMP 圖形介面,載入「長頸鹿」的圖片。
- b. 也可,完全用 Python Code 下載並載入 lemmling_Cartoon_giraffe.png
- 方法 a. 使用 GIMP 圖形介面,找到圖檔 lemmling_Cartoon_giraffe.png,而後,載入到影像視窗內。接著,透過 Python Code 設定影像物件的變數。
img_array = gimp.image_list() img = img_array[0] # 必須確定此為「最新載入的影像」 drw_backup = pdb.gimp_image_get_active_layer(img)
- 方法 b. 直接透過 file_uri_load ,載入網路上的圖檔到影像視窗內。
file_uri = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXwQezpqd34glH5AbM9lK_yJfbXM8nayxc7RHoCuOnDVjWZh2q_Q8ORk5ABMg_EZuUNvcs_6qcB6b8E9omng-DSMLnVva2ewVEwnI16rJx23iVwPOcnD01FsI7yRGXuv1zMWctzraVeoFn/s512/lemmling_Cartoon_giraffe.png" img = pdb.file_uri_load(file_uri, file_uri) drw_backup = pdb.gimp_image_get_active_layer(img) pdb.gimp_drawable_set_name(drw_backup, "Giraffe Original") pdb.gimp_display_new(img)
- 啟動 GIMP Python Console
- 前面兩種方式都可載入「長頸鹿」圖片。
- 將前面的程式碼,選取、複製、再貼到 Python Console 提示符號 >>> 之後,按下 Enter 。
- 過一會,就會看到新的影像視窗,內有「長頸鹿」圖片。
- 下圖只呈現「長頸鹿」圖片。
長頸鹿,圖片來源OpenClipArt
- 接續前一節的練習操作,改用 Python-Fu 自動化字體的生成流程。
- 下面的程式碼,分成七大部份:
- 首先,要準備好新的影像、新的圖層。
- 產生純色的長頸鹿的剪影
- 灰階的外燄
- 灰階的內燄
- 產生火燄的效果
- 漸層效果 + 立體效果(此部份,也可省略不做)
- 調整圖層的結構,與顯示的順序
# Part 1. # 載入圖片有很多方法 # 方法 a. 使用 GIMP 圖形介面,找到圖檔,而後,載入到影像視窗內。 # img_array = gimp.image_list() # img = img_array[0] # 必須確定此為「最新載入的影像」 # drw_backup = pdb.gimp_image_get_active_layer(img) # 方法 b. 直接透過網路,使用 file_uri_load ,載入圖檔到影像視窗內。 # 長頸鹿 file_uri = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXwQezpqd34glH5AbM9lK_yJfbXM8nayxc7RHoCuOnDVjWZh2q_Q8ORk5ABMg_EZuUNvcs_6qcB6b8E9omng-DSMLnVva2ewVEwnI16rJx23iVwPOcnD01FsI7yRGXuv1zMWctzraVeoFn/s512/lemmling_Cartoon_giraffe.png" # GIMP 吉祥物 Wilber #file_uri = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMKRcvr2wtbpxu-GCWvlY5GNRvBtPXUeY5JJgdZj-munau_YCSReuiBDAPMccuETSJSl7eyFNkHprg65prGTyREituCJ4F56n304aDdIbwq9fqsEFavmd7GLSHs4q5Fg3Z_WywRpX5S2zt/s512/wilber_work.png" img = pdb.file_uri_load(file_uri, file_uri) drw_backup = pdb.gimp_image_get_active_layer(img) pdb.gimp_drawable_set_name(drw_backup, "Giraffe Original") pdb.gimp_display_new(img) # 圖片的尺寸 width = pdb.gimp_image_width(img) height = pdb.gimp_image_height(img) # 前景色設為黑色,背景色設為白色 black = (0, 0, 0) white = (255, 255, 255) # 前景色設為紅色,背景色設為黃色 red = (255, 0, 0) yellow = (255, 255, 0) bg_layer = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "Black BG with Fire", 100, NORMAL_MODE) pdb.gimp_image_add_layer(img, bg_layer, 0) pdb.gimp_context_set_foreground(black) pdb.gimp_edit_fill(layer, FOREGROUND_FILL)
# Part 2. logo_backup = pdb.gimp_layer_copy(drw_backup, TRUE) pdb.gimp_image_add_layer(img, logo_backup, -1) pdb.gimp_drawable_set_name(logo_backup, "Logo Backup") pdb.gimp_selection_layer_alpha(logo_backup) pdb.gimp_context_set_foreground(white) pdb.gimp_edit_fill(logo_backup, FOREGROUND_FILL) pdb.gimp_selection_none(img)
# Part 3. # 灰階的外燄 fire_outer1 = pdb.gimp_layer_copy(logo_backup, TRUE) pdb.gimp_image_add_layer(img, fire_outer1, -1) pdb.gimp_selection_layer_alpha(fire_outer1) pdb.gimp_selection_grow(img, 2) pdb.gimp_context_set_foreground(white) pdb.gimp_edit_fill(fire_outer1, FOREGROUND_FILL) pdb.gimp_selection_none(img) fire_outer2 = pdb.gimp_layer_copy(fire_outer1, TRUE) pdb.gimp_image_add_layer(img, fire_outer2, -1) blur_radius = 10 pdb.plug_in_gauss_iir(img, fire_outer1, blur_radius, 1, 1) shift_amount = 50 orientation = 0 pdb.plug_in_shift(img, fire_outer1, shift_amount, orientation) fire_outer1 = pdb.gimp_image_merge_down(img, fire_outer2, EXPAND_AS_NECESSARY) pdb.plug_in_shift(img, fire_outer1, shift_amount, orientation) amplitude = 10 phase = 0 wavelength = 30 #wavelength = 50 pdb.plug_in_waves(img, fire_outer1, amplitude, phase, wavelength, 0, FALSE) pdb.gimp_rect_select(img, 0, (height*2/3), (width-1), (height-1), 0, TRUE, 4) pdb.gimp_edit_clear(fire_outer1) pdb.gimp_selection_none(img) blur_radius = 10 pdb.plug_in_gauss_iir(img, fire_outer1, blur_radius, 1, 1) fire_outer2 = pdb.gimp_layer_copy(fire_outer1, TRUE) pdb.gimp_image_add_layer(img, fire_outer2, -1) fire_outer = pdb.gimp_image_merge_down(img, fire_outer2, EXPAND_AS_NECESSARY) pdb.gimp_drawable_set_name(fire_outer, "Fire Outer Layer") pdb.gimp_layer_set_visible(logo_backup, FALSE)
# Part 4. # 灰階的內燄 fire_inner = pdb.gimp_layer_copy(logo_backup, TRUE) pdb.gimp_image_add_layer(img, fire_inner, -1) pdb.gimp_drawable_set_name(fire_inner, "Fire Inner Layer") pdb.gimp_selection_layer_alpha(fire_inner) pdb.gimp_selection_grow(img, 2) pdb.gimp_context_set_foreground(white) pdb.gimp_edit_fill(fire_inner, FOREGROUND_FILL) pdb.gimp_selection_none(img) blur_radius = 10 pdb.plug_in_gauss_iir(img, fire_inner, blur_radius, 1, 1)
# Part 5. # 合併外燄、內燄、黑色背景 # 漸層換色,產生火燄的效果 fire_layer = pdb.gimp_image_merge_down(img, fire_inner, EXPAND_AS_NECESSARY) bg_layer = pdb.gimp_image_merge_down(img, fire_layer, EXPAND_AS_NECESSARY) pdb.gimp_drawable_set_name(bg_layer, "Black BG with Fire") gradient = "German flag smooth" pdb.gimp_context_set_gradient(gradient) pdb.plug_in_gradmap(img, bg_layer)
# Part 6. # 漸層效果 + 立體效果 pdb.gimp_layer_set_visible(logo_backup, TRUE) logo_layer = pdb.gimp_layer_copy(logo_backup, TRUE) pdb.gimp_image_add_layer(img, logo_layer, -1) pdb.gimp_drawable_set_name(logo_layer, "Gradient Effect Logo") pdb.gimp_layer_set_lock_alpha(logo_layer, TRUE) pdb.gimp_context_set_foreground(yellow) pdb.gimp_context_set_background(red) offset =0 ;repeat = REPEAT_NONE;reverse = FALSE; supersample = FALSE ; max_depth = 0 ; threshold = 0; dither = TRUE ; x1 = 0; y1 = height/2; x2 = width; y2 = height/2 # 相當於由左至右拉一條直線 pdb.gimp_blend(logo_layer, FG_BG_RGB_MODE, NORMAL_MODE, GRADIENT_LINEAR, 100, offset, repeat, reverse, supersample, max_depth, threshold, dither, x1, y1, x2, y2) # pdb.plug_in_bump_map(img, logo_layer, logo_layer, 135.0, 35, 3, 0, 0, 0, 0, TRUE, FALSE, 0)
# Part 7. # 讓「長頸鹿」圖案顯示在最上方的圖層 # 讓「火燄效果 」烘托「長頸鹿」圖案 pdb.gimp_image_raise_layer_to_top(img, drw_backup) pdb.gimp_layer_set_visible(logo_backup, FALSE) pdb.gimp_layer_set_visible(logo_layer, FALSE)
- 啟動 GIMP Python Console
- 將前面的程式碼,依次序,全部選取、複製、再貼到 Python Console 提示符號 >>> 之後,按下 Enter 。
- 過一會,就會看到火燄效果,與其圖層結構,如下圖所示。
- Wilber 是 GIMP 的吉祥物。
- 圖片來源 GIMP 官方網站 Wilber, the GIMP mascot
- 原圖是 PNG 格式,背景為透明。
- 擴張原圖外圍的透明區域,讓外圍有足夠的空間可以施加火燄效果。
- 使用前面的程式碼,修改 file_uri = "......" 直接透過網路,載入圖檔到影像視窗內。
- 還要修改 amplitude 與 wavelength
file_uri = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMKRcvr2wtbpxu-GCWvlY5GNRvBtPXUeY5JJgdZj-munau_YCSReuiBDAPMccuETSJSl7eyFNkHprg65prGTyREituCJ4F56n304aDdIbwq9fqsEFavmd7GLSHs4q5Fg3Z_WywRpX5S2zt/s512/wilber_work.png" amplitude = 5 wavelength = 20
- 火燄效果如下圖所示。