縮放效果動畫的製作流程
- 最初,小島圖案是 512 x 512 。
- 假設原本共有 16 個大小與內容都相同的圖層。
- 第 1 個圖層不做裁切 。
- 剩餘的圖層,每次,上下左右,都裁除 8 個像素。
- 而後,將裁切後的圖案都縮小為 256 x 256 。
- 讓所有圖層的左上角都置於 (0, 0) 。
- 這樣,就會有圖案漸漸放大的效果。
等價的 Python-Fu 程式碼
w = 512
h = 512
s_w = w/2
s_h = h/2
layer_num = 16
amount = 8
pdb.gimp_context_set_gradient("Land 1")
pdb.script_fu_flatland(w, h, 80, 3.0, 4.0, 4.0)
img_array = gimp.image_list()
img = img_array[0] # flat land 這個影像
pdb.gimp_image_flatten(img)
layer1 = pdb.gimp_image_active_drawable(img)
pdb.gimp_drawable_set_name(layer1, "layer 1")
layer_list = []
layer_list.append(layer1)
for i in range(1,layer_num):
drw = pdb.gimp_layer_copy(layer1, TRUE)
layer_list.append(drw)
pdb.gimp_image_add_layer(img, layer_list[i], -1)
name = "layer " + str(i+1)
pdb.gimp_drawable_set_name(layer_list[i], name)
pdb.gimp_layer_scale(layer1, s_w, s_h, TRUE)
pdb.gimp_layer_set_offsets(layer1, 0, 0)
for i in range(1,layer_num):
offx = i * amount
offy = i * amount
width = w - 2 * offx
height = h - 2 * offy
print offx, offy, width, height
# 一定要 set active layer ,不然 autocrop layer 有時會失效
pdb.gimp_image_set_active_layer(img, layer_list[i])
pdb.gimp_rect_select(img, offx, offx, width, height, 2, FALSE, 0)
pdb.gimp_selection_invert(img)
pdb.gimp_edit_cut(layer_list[i])
pdb.plug_in_autocrop_layer(img, layer_list[i])
pdb.gimp_layer_scale(layer_list[i], s_w, s_h, TRUE)
pdb.gimp_layer_set_offsets(layer_list[i], 0, 0)
pdb.gimp_selection_none(img)
pdb.gimp_image_resize_to_layers(img)
- 把上面的程式碼,貼到 GIMP Python-Fu Console 提示符號 >>> 之後。
- 而後,可以將檔案存為 GIF 檔。
- 下圖 GIF 動畫的延遲時間是 1000 ms 。
假設 img_array[0] 代表大象的圖案
w = 640
h = 640
layer_num = 16
#pdb.gimp_context_set_gradient("Land 1")
#pdb.script_fu_flatland(w, h, 80, 3.0, 4.0, 4.0)
- 開啟大象的圖案,假設 img_array[0] 代表大象的圖案,大象的圖案源自於 Open Clip Art
- 把前面的程式碼,修改後,全部貼到 GIMP Python-Fu Console 提示符號 >>> 之後。
- 而後,可以將檔案存為 GIF 檔。
- 下圖 GIF 動畫的延遲時間是 1000 ms 。