使用80 x 80 橘色方塊,來測試「纖維紋路」的效果
- 原本的clothify.scm需要參考到既存的影像物件、圖層物件,才能正確運行。
- 添加「建立 80 x 80 橘色圖層」的程式碼,這樣「纖維紋路的程式」才能正確運行 。
- 下圖是程式碼執行後的圖案,80 x 80 橘色方塊。
swidth = 80
sheight = 80
#新增影像物件
square_img = pdb.gimp_image_new(swidth, sheight, RGB)
#新增圖層物件
square_drw = pdb.gimp_layer_new(square_img, swidth, sheight, RGB_IMAGE, "tmp", 100, NORMAL_MODE)
#將圖層物件加入影像物件
pdb.gimp_image_add_layer(square_img, square_drw, 0)
color = (234, 125, 30)
pdb.gimp_context_set_background(color)
pdb.gimp_edit_fill(square_drw, BACKGROUND_FILL) #填滿橘色
pdb.gimp_display_new(square_img)
修改後的程式碼,與測試的結果圖
# 要先準備好「測試用的影像與圖層」
timg = square_img #指派影像物件
tdrawable = square_drw #指派圖層物件
#t 表示 temporary 臨時的
bx = 9
by = 9
azimuth = 135
elevation = 45
depth = 3
width = pdb.gimp_drawable_width(tdrawable)
height = pdb.gimp_drawable_height(tdrawable)
img = pdb.gimp_image_new(width, height, RGB)
layer_one = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "X, Dots", 100, NORMAL_MODE)
layer_two = 0
bump_layer = 0
pdb.gimp_context_push()
pdb.gimp_image_undo_disable(img)
pdb.gimp_image_add_layer(img, layer_one, 0)
color = (255, 255, 255)
pdb.gimp_context_set_background(color)
pdb.gimp_edit_fill(layer_one, BACKGROUND_FILL)
pdb.plug_in_noisify(img, layer_one, FALSE, 0.7, 0.7, 0.7, 0.7)
layer_two = pdb.gimp_layer_copy(layer_one, 0)
pdb.gimp_layer_set_mode(layer_two, MULTIPLY_MODE)
pdb.gimp_image_add_layer(img, layer_two, 0)
pdb.gimp_display_new(img) # 顯示 img 物件
pdb.plug_in_gauss_rle(img, layer_one, bx, TRUE, FALSE)
pdb.plug_in_gauss_rle(img, layer_two, by, FALSE, TRUE)
#pdb.gimp_image_flatten(img)
bump_layer = pdb.gimp_image_get_active_layer(img)
pdb.plug_in_c_astretch(img, bump_layer)
pdb.plug_in_noisify(img, bump_layer, FALSE, 0.2, 0.2, 0.2, 0.2)
pdb.plug_in_bump_map(img, tdrawable, bump_layer, azimuth, elevation, depth, 0, 0, 0, 0, FALSE, FALSE, 0)
#pdb.gimp_image_delete(img)
pdb.gimp_displays_flush()
pdb.gimp_context_pop()
觀看纖維紋路的合成原理
- 增加顯示 img 物件的程式碼 gimp_display_new(img)
- 以分號註解下面這兩行
- gimp_image_flatten(img)
- gimp_image_delete(img)
- 這樣就會看到兩個圖層疊合的效果,可參考25.3節與25.4節的分析。
- 實際產生縱橫交織的紋路時,不能註解gimp_image_flatten(img)
- 因為,兩圖層要合併,才能讓受作用的圖案,垂直方向與水平方向,都產生紋路。