[Part I. GIMP基礎功]

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



8.9 立體與陰影的效果

以立體的字母A,來說明立體字的製作
  • 立體字的圖層結構,可分解為三部份
    • 由凹凸貼圖濾鏡所產生的立體字
    • 淡橘色的陰影
    • 白色的背景


前製作業,準備各個圖層
  • 執行[影像] / 檔案 / 新增 【註1】 ,產生寬為128像素,高為128像素,背景色為白色的新影像,將新影像存為 3D_Text.xcf 。
  • 使用文字工具,在文字工具的選項面版內,字型設為 Sans Bold,尺寸設為100,文字的顏色設為橘色。
  • 在圖層面版內,文字圖層的圖示有一個T字,由於在文字圖層裡寫入字母「A」,因此圖層的名稱為A。此時的圖層結構如下圖。



  • 保留圖層A,作為備份,若在練習過程中出錯可以再重新練習一次。
  • 在圖層面版內,複製兩份圖層A。此時的圖層結構如下圖。



  • 對這兩個圖層A的複本,執行「令圖層符合圖片尺寸」,此指令會讓圖層邊界與圖片邊界相同,並且讓文字圖層轉變為一般圖層。
  • 將複製所得的圖層更名為3D_Text與Shadow。此時的圖層結構如下圖。



淡橘色的陰影
  • 接下來,要在 Shadow 圖層中,製作文字的陰影效果。陰影產生的方法有許多變化。但最重要的是要用到模糊濾鏡。
  • 先確定在圖層面版內已選取 Shadow 圖層,不可勾選「鎖定」項目。
  • 點選影像視窗,執行五次[影像] / 濾鏡 / 模糊化 / 高斯模糊 【註2】 ,參數為預設值5。


  • 執行[影像] / 圖層 / 變換 / 移位 【註3】 ,移位X設5 px,移位Y設5 px,將 Shadow 圖層的陰影圖案往右下方移動。



加入立體的字樣
  • 接下來,要在 3D_Text 圖層中,製作立體字的效果。
  • 先確定在圖層面版內已選取 3D_Text 圖層,不可勾選「鎖定」項目。
  • 點選影像視窗,執行[影像] / 濾鏡 / 映射 / 凹凸貼圖 【註4】 ,參數採用預設值。


  • 因為 Azimuth 預設135,Elevation 預設45,由結果圖,可看出光源是在方位角135的地方,故立體的A字右下方有一圈黑邊。深度(Depth)預設值為3,也可設大一些讓黑邊更明顯。
  • 下圖是立體的字母A、陰影、白色背景三個圖層疊在一起。



選單及項目名稱的英文:
【註1】 [Image] / File / New
【註2】 [Image] / Filters / Blur / Gaussian Blur
【註3】 [Image] / Layer / Transform / Offset,Offset X設10 px,Offset Y設10 px
【註4】 [Image] / Filters / Map / Bump Map


等價的 Python-Fu 程式碼
  • 接續前面的練習操作,改用 Python-Fu 自動化字體的生成流程。
  • 下面的程式碼,分成四部份:
    1. 首先,要準備好新的影像,產生白色背景的圖層。
    2. pdb.gimp_text_fontname(...) 寫上粗體字的 A,此圖層作為字體的備份圖層。
    3. pdb.gimp_layer_copy(...) 產生字體的圖層、陰影的圖層。
    4. pdb.plug_in_gauss_iir(...) 產生陰影的效果,pdb.plug_in_bump_map(...) 產生立體字的效果。

# Part 1.
# 圖片的尺寸
width = 128
height = 128
# 背景色設為白色,文字為橘色
white = (255, 255, 255)
orange = (252, 143, 50)

img = pdb.gimp_image_new(width, height, RGB)
bg_layer = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "背景", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(img, bg_layer, 0)
pdb.gimp_context_set_background(white)
pdb.gimp_edit_fill(bg_layer, BACKGROUND_FILL)

pdb.gimp_display_new(img)


# Part 2.
string = "A"
font_size = 100
#font = "Sans Bold" # Ubuntu 之下  "Sans Bold" 竟然沒有粗體字的效果
font = "DejaVu Sans Bold"
# 測試環境為 Ubuntu 11.10
# 需注意你所使用的作業系統有無 "DejaVu Sans Bold" 字型

text_ext = pdb.gimp_text_get_extents_fontname(string, font_size, PIXELS, font)
text_width = text_ext[0]
text_height= text_ext[1]
# 將 A 字樣放在適當的地方
text_offx = width/2 - text_width/2
text_offy = height/2 - text_height/2

A_original = pdb.gimp_layer_new(img, width, height, RGBA_IMAGE, "A", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(img, A_original, 0)

pdb.gimp_context_set_foreground(orange)
tmp_layer = pdb.gimp_text_fontname(img, A_original, text_width, text_height ,string, 0, TRUE, font_size, PIXELS, font)
pdb.gimp_layer_set_offsets(tmp_layer, text_offx, text_offy)
pdb.gimp_floating_sel_anchor(tmp_layer)


# Part 3.
shadow_layer = pdb.gimp_layer_copy(A_original, TRUE)
pdb.gimp_image_add_layer(img, shadow_layer, -1)
pdb.gimp_drawable_set_name(shadow_layer, "Shadow")

text_layer = pdb.gimp_layer_copy(A_original, TRUE)
pdb.gimp_image_add_layer(img, text_layer, -1)
pdb.gimp_drawable_set_name(text_layer, "3D_Text")

pdb.gimp_layer_set_visible(A_original, FALSE)


# Part 4.
for i in range(0,5):
  blur_radius = 5
  pdb.plug_in_gauss_iir(img, shadow_layer, blur_radius, 1, 1)

pdb.gimp_layer_set_offsets(shadow_layer, 5, 5)
pdb.plug_in_bump_map(img, text_layer, text_layer, 135.0, 35, 3, 0, 0, 0, 0, TRUE, FALSE, 0)

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