[Part I. GIMP基礎功]

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



15.10 畫面微微的晃動

  • 可利用「Script-Fu: Rippling」加上「Script-Fu: Blend」,製作出微微晃動的效果。


電漿圖案,漣波起伏的效果
  • 新增一張影像,尺寸為256 x 256。
  • 執行[影像] / 濾鏡 / 描繪 / 雲狀 / 電漿 【註1】,使用預設參數,產生一張電漿的圖案。

  • 執行[影像] / 濾鏡 / 動畫 / Rippling,使用預設參數,產生漣波動畫,畫格數目為15。
  • 執行[影像] / 濾鏡 / 動畫 / Blend,使用預設參數,讓漣波晃動的效果更柔和,產生的動畫其畫格數目為56。

Rippling動畫,畫格數15。
Blend動畫,畫格數56。



波光晃動的效果
  • 仿照上述操作,可製作海水微微起伏的效果。

靜止的海水。

漣波起伏,畫格數56。

電漿漣波起伏,等價的 Python-Fu 程式碼
  • 由於,使用 GIMP 內建的函數產生動畫,因此,下面的程式碼,很簡短。
  • 下面的程式碼,分成四大部份:
    1. pdb.plug_in_plasma(...) 產生電漿圖案
    2. pdb.script_fu_ripply_anim(...) 產生 15 格的動畫
    3. pdb.script_fu_blend_anim(...) 產生 56 格的動畫
    4. pdb.file_gif_save(...) 儲存為 GIF 動畫

# Part 1. 準備好一張電漿圖案的影像
# 影像的尺寸
width = 256;height = 256;
img_plasma = pdb.gimp_image_new(width, height, RGB)
drw_plasma = pdb.gimp_layer_new(img_plasma, width, height, RGB_IMAGE, "Plasma", 100, NORMAL_MODE)
pdb.gimp_display_new(img_plasma)
pdb.gimp_image_add_layer(img_plasma, drw_plasma, 0)
# Plasma 所使用的參數值
seed = 0; turbulence = 1
pdb.plug_in_plasma(img_plasma, drw_plasma, seed, turbulence)

# Part 2. 產生 15 個畫格的動畫
pdb.script_fu_ripply_anim(img_plasma, drw_plasma, 3, 15, 0)
img_array = gimp.image_list()
# 假設「最新的影像」是「Rippling動畫效果」這個影像視窗
img1 = img_array[0]
drw1 = pdb.gimp_image_active_drawable(img1)

# Part 3. 產生 56 個畫格的動畫
pdb.script_fu_blend_anim(img1, drw1, 3, 0, TRUE)
img_array = gimp.image_list()
# 假設「最新的影像」是「Rippling+Blend動畫效果」這個影像視窗
img2 = img_array[0]
drw2 = pdb.gimp_image_active_drawable(img2)

# Part 4. 儲存為 GIF 動畫檔
pdb.gimp_convert_indexed(img1, NO_DITHER, MAKE_PALETTE, 255, FALSE, FALSE, 0)
gif_file = "/tmp/plasma_rippling_anim.gif"
pdb.file_gif_save(img1, drw1, gif_file, "", FALSE, TRUE, 100, 2)

pdb.gimp_convert_indexed(img2, NO_DITHER, MAKE_PALETTE, 255, FALSE, FALSE, 0)
gif_file = "/tmp/plasma_rippling_and_blend_anim.gif"
pdb.file_gif_save(img2, drw2, gif_file, "", FALSE, TRUE, 100, 2)



海水微微起伏,等價的 Python-Fu 程式碼
  • 由於,使用 GIMP 內建的函數產生動畫,因此,下面的程式碼,很簡短。
  • 下面的程式碼,分成四大部份:
    1. pdb.file_uri_load(...) 載入海水的影像
    2. pdb.script_fu_ripply_anim(...) 產生 15 格的動畫
    3. pdb.script_fu_blend_anim(...) 產生 56 格的動畫
    4. pdb.file_gif_save(...) 儲存為 GIF 動畫

# Part 1. 指定 uri 載入海水的影像
# 靜止海水影像的 uri
file_uri = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRrBvVJxfo6kQwXjWI873OQo371PiXoFb2df0KR814SDMZPmxFkS2B86-ECex8OAvZDqqr-1DG3W_92PZc7fB4HcmLTEVNYB9hSHIeAVUM15ZKEaRdYQLo6hRL-uRvVLdy4QDgDCFHTNSa/s400/seawater.jpg"
#file_uri = "file:///tmp/seawater.jpg" # 也可先儲存在 /tmp 目錄內
img_sea = pdb.file_uri_load(file_uri, file_uri)
drw_sea = pdb.gimp_image_get_active_layer(img_sea)
pdb.gimp_drawable_set_name(drw, "Sea Water")
pdb.gimp_display_new(img_sea)

# Part 2. 產生 15 個畫格的動畫
pdb.script_fu_ripply_anim(img_sea, drw_sea, 3, 15, 0)
img_array = gimp.image_list()
# 假設「最新的影像」是「Rippling動畫效果」這個影像視窗
img1 = img_array[0]
drw1 = pdb.gimp_image_active_drawable(img1)

# Part 3. 產生 56 個畫格的動畫
pdb.script_fu_blend_anim(img1, drw1, 3, 0, TRUE)
img_array = gimp.image_list()
# 假設「最新的影像」是「Rippling+Blend動畫效果」這個影像視窗
img2 = img_array[0]
drw2 = pdb.gimp_image_active_drawable(img2)

# Part 4. 儲存為 GIF 動畫檔
pdb.gimp_convert_indexed(img1, NO_DITHER, MAKE_PALETTE, 255, FALSE, FALSE, 0)
gif_file = "/tmp/sea_rippling_anim.gif"
pdb.file_gif_save(img1, drw1, gif_file, "", FALSE, TRUE, 100, 2)

pdb.gimp_convert_indexed(img2, NO_DITHER, MAKE_PALETTE, 255, FALSE, FALSE, 0)
gif_file = "/tmp/sea_rippling_and_blend_anim.gif"
pdb.file_gif_save(img2, drw2, gif_file, "", FALSE, TRUE, 100, 2)

  • 啟動 GIMP Python Console
  • 將前面的程式碼,全部選取、複製、再貼到 Python Console 提示符號 >>> 之後,按下 Enter 。
  • 過一會,就會看到結果。
  • 結果圖與前面相同,可參考「漣波起伏,畫格數56」
  • 確定你也是在 Linux 環境下,有 /tmp 目錄。
  • 前往 /tmp 目錄,就會看到微微起伏的海水的動畫檔。