[Part I. GIMP基礎功]

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

8.7 身穿花花衣

繼續裝扮 Hello!
  • 承接前節的範例,繼續美化文字的工作。
  • 除了可利用程式內建的圖樣,來為文字填上不同的紋路,任何圖案與影像若是合適,也可以作為文字的底色與紋路。
  • 鬱金香的紫色與紅色還蠻醒目的,下面利用花朵的外形與色澤來寫字。


有美美的圖,才能裝扮
  • 以GIMP開啟 tulip.jpg 鬱金香。
  • 將圖片另外儲存為 tulip_text.xcf, XCF 格式較適於儲存過程中的半成品。



還要有字體,才能裝扮
  • 在工具箱中,按下文字按鈕,點一下tulip_text.xcf圖片顯示視窗。
  • 在GIMP文字編輯器的輸入框,鍵入 Hello! 。
  • 在文字工具的選項面版內,將字型樣式設為Sans Bold,大小設為 120。
  • 點選tulip_text.xcf圖片顯示視窗,將 Hello! 字樣放在適當的地方。把小寫的 l 放在鬱金香牌子的上方。



產生 Hello! 字樣的選取區域
  • 要選著黑色的 Hello! 字樣,有很多方法。
  • 因為有透明的背景,因此可在文字圖層上,執行[影像] / 圖層 / 透明度 / 透明區域轉為選擇區域 【註1】
注意!
「透明區域轉為選擇區域」的原文為Alpha to Selection,實際上,執行後,是「不透明」的區域被選著。


顯示 Hello! 字樣的選取區域
  • 現在,圖層面版內,文字圖層的眼睛圖示按掉,使文字圖層的效果不顯示出來。

  • 在tulip_text.xcf視窗,會看到的情形,如下圖所示,在鬱金香上,產生一個 Hello! 字樣的選取區域。



反轉選取區域,填滿淺藍色
  • 在圖層面版內,點選「背景」圖層,也就是鬱金香的圖。
  • 點選tulip_text.xcf視窗,執行[影像] / 選擇 / 相反 【註2】
  • 將前景色設為淺藍,執行[影像] / 編輯 / 填上前景顏色 【註3】
  • 結果圖為淺藍的底色,身穿花花衣的 Hello! 字樣,如下圖所示,還看得出它是鬱金香嗎?



選單及項目名稱的英文:
【註1】 [Image] / Layer / Transparancy / Alpha to Selection
【註2】 [Image] / Select / Invert
【註3】 [Image] / Edit / Fill with FG Color


等價的 Python-Fu 程式碼
  • 接續前面的練習操作,改用 Python-Fu 自動化字體的生成流程。
  • 下面的程式碼,分成三大部份:
    1. 首先,要載入影像 tulip.jpg ,取得 tulip.jpg的圖層物件。
    2. pdb.gimp_text_fontname(...) 寫上粗體字的 Hello!
    3. pdb.gimp_edit_fill(...) 填上藍色,凸顯出身穿花花衣的 Hello!

# Part 1.
# 下載 tulip.jpg 鬱金香圖案
# 將 tulip.jpg 放在你找得到的位置,例如,tmp 目錄
#filename = os.getcwd()+"/"+"tulip.jpg"
filename = "/tmp/tulip.jpg"
tulip_img = pdb.file_jpeg_load(filename, filename)
tulip_layer = pdb.gimp_image_get_active_layer(tulip_img)
# 圖片的尺寸
width = pdb.gimp_image_width(tulip_img)
height = pdb.gimp_image_height(tulip_img)

pdb.gimp_display_new(tulip_img)


# Part 2.
string = "Hello!"
font_size = 120
#font = "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]
# 將 Hello! 字樣放在適當的地方
text_offx = width/2 - text_width/2
text_offy = height/2 - text_height/2

text_layer = pdb.gimp_layer_new(tulip_img, width, height, RGBA_IMAGE, "Hello!", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(tulip_img, text_layer, 0)

pdb.gimp_context_set_foreground(black)
tmp_layer = pdb.gimp_text_fontname(tulip_img, text_layer, 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.
# 利用 Hello! 字體產生選取區域
# 這一行是重要的關鍵
pdb.gimp_selection_layer_alpha(text_layer)

pdb.gimp_selection_invert(tulip_img)

# 前景色設為天空藍
sky_blue = (194, 226, 251)
pdb.gimp_context_set_foreground(sky_blue)
pdb.gimp_edit_fill(tulip_layer, FOREGROUND_FILL)

pdb.gimp_layer_set_visible(text_layer, FALSE)
pdb.gimp_selection_none(tulip_img)

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