繼續裝扮 Hello!
- 承接前節,繼續文字美化的工作。
- 若想為文字塗上不同的紋路,使用不同的圖樣(Pattern)來當文字的底色,要如何做呢?
先要有字體,才能裝扮
- 新增背景為白色的圖片,產生一大小為256x128,將該圖存為 text.xcf。
- 使用文字工具,在text.xcf的視窗內,寫上 Hello! 字樣。
- 這是黑色的 Hello! ,不是彩色的。
所有運算,只作用在黑色的字體上
- 切換至圖層面版,選取「Hello!」文字圖層。
- 勾選「鎖定」項目。設定了「鎖定」, 則該圖層的「透明色版」會將鎖住。之後的運算,只作用在紅綠藍三色版。
- 原本透明的部份,將不會受到任何影響。只影響原本有顏色的地方,也就是,只有文字 Hello! 會受影響。
所有顏料,只塗滿在黑色的字體上
- 現在,要為黑色的 Hello! ,穿上彩色的花紋。
- 在填色工具的選項面版內
- 「填滿類型」Fill Type 設為填上圖樣
- 「影響區域」Affected Area 設為填滿整個選擇區域
- 單擊填色工具按鈕。
- 點一下 text.xcf 圖片視窗,執行[影像] / 選擇 / 全選。
- 點一下 text.xcf 圖片的 Hello! 字樣。
- 而後,字樣會以 Pine 圖樣填滿。
披上豹皮的字體
- 在圖樣面版內。再選一個喜歡的圖樣。
- 這次選 Leopard,豹紋的圖樣。
- 此時,仍在使用填色工具。
- 此時, text.xcf 的文字圖層,仍是在全選的狀態之下。
- 再點一下 text.xcf 圖片的 Hello! 字樣。
- 字樣會以豹紋圖樣填滿,得到一個披上豹皮的 Hello! 。
等價的 Python-Fu 程式碼
- 接續前面的練習操作,改用 Python-Fu 自動化字體的生成流程。
- 下面的程式碼,分成三大部份:
- 首先,要準備好新的影像、新的圖層。
- pdb.gimp_text_fontname(...) 寫上粗體字的 Hello!
- pdb.gimp_bucket_fill(...) 產生填圖的效果。豹紋字與漸層字相比較,程式碼只有這部份有差異。由此可知,豹紋字的程式碼比較短。
# Part 1.
# 圖片的尺寸
width = 256
height = 128
# 前景色設為黑色,背景色設為白色
black = (0, 0, 0)
white = (255, 255, 255)
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 = "Hello!"
font_size = 72
#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(img, width, height, RGBA_IMAGE, "Hello!", 100, NORMAL_MODE)
pdb.gimp_image_add_layer(img, text_layer, 0)
pdb.gimp_context_set_foreground(black)
tmp_layer = pdb.gimp_text_fontname(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.
# 所有運算,只作用在黑色的字體上
# 這一行是重要的關鍵
pdb.gimp_layer_set_lock_alpha(text_layer, TRUE)
pdb.gimp_selection_all(img)
#pattern_name = "Pine"
pattern_name = "Leopard"
pdb.gimp_context_set_pattern(pattern_name)
pdb.gimp_bucket_fill(text_layer, PATTERN_BUCKET_FILL, NORMAL_MODE, 100, 15, FALSE, 0, 0)
pdb.gimp_selection_none(img)