你可以混合 Python-Fu Code 與介面視窗的操作
- 互動,意指一部分操作 GIMP 介面視窗,一部分由 Python-Fu Code 完成。
- 接續前節,改用 Python-Fu Code 來說明。
- 以半自動化的操作方式,連續施加兩種濾鏡的效果。
在 GIMP 之中,什麼是「物件」?
- 類似於「物件導向程式設計」對於物件的定義,物件包裹了一些資料變數與一組相關的操作函式。
- 在 GIMP 之中,影像、色版、圖層、選取區域、遮罩,這些東西都可稱為物件。
- 如果要用 Python-Fu Code 來控制 GIMP 介面視窗的操作,至少要知道影像物件的 reference 。
Python 最重要的資料結構是 list
- Python 最重要的資料結構 list 。
- Python 的 list 類似於 C 的 array ,從都透過索引值來讀寫內容。
- Python list 資料索引值是從 0 開始增加的 。
要會區別「影像 id」與「影像 reference」
- Script-Fu 用物件的 id , 控制物件的操作, id 為流水號,從 1 開始編號 。
- Python-Fu 用物件的 reference , 控制物件的操作。
- Python 的變數名稱,就代表了物件的 reference 。
- Python-Fu 之中,要取得影像視窗的控制權,不能透過 id 影像,而是要透過影像物件的 reference 。
img_array = gimp.image_list()
img = img_array[0]
drw = pdb.gimp_image_get_active_layer(img)
- gimp.image_list() 回傳一個 list ,內含目前所有的影像物件的 reference 。
- img = img_array[0] 將最新的影像物件的 reference 儲存在 img 變數。
取得視窗所承載的影像 id
- 以簡單的方形黑色塊,觀察影像物件的 reference 。
- 從影像視窗的標題列得知,第一張開啟的影像編號為 1.0
>>> gimp.image_list()
[<gimp.Image 'test_square_.jpg'>, <gimp.Image 'test_square_.jpg'>]
>>> img_array = gimp.image_list()
>>> img_array[0]
<gimp.Image 'test_square_.jpg'>
>>> img_array[1]
<gimp.Image 'test_square_.jpg'>
- 代表目前開啟兩張影像檔,雖然是相同的檔案 test_square_.jpg
- 有兩個影像物件 img_array[0] 與 img_array[1]
取得欲作用的圖層 id
- JPEG 檔只有一個圖層。
- 先確定 img_array[0] 代表那張影像檔。
- 在 Python Console 的提示符號 >>> 之後,鍵入
img_array = gimp.image_list()
img = img_array[0]
drw = pdb.gimp_image_get_active_layer(img)
- 就可將取得「 active 圖層的 reference」
- active 是指目前選到的、會發生作用的、會發生作用的圖層。
用視窗介面開啟檔案,再用程式碼施加濾鏡效果
- 通常,都是用視窗介面的選單,來執行濾鏡的功能,以此,施加濾鏡效果。
- 在此示範,用 Python-Fu Code 連續施加兩種濾鏡的效果。
- 開啟測試的圖檔,假設它是最新開啟的圖檔 。
- 將下列的程式碼,複製後,再貼到 GIMP Python Console 提示符號 >>> 之後。
- 按下 Enter 鍵,就會看到結果圖,如下所示。
img_array = gimp.image_list()
img = img_array[0]
drw = pdb.gimp_image_get_active_layer(img)
blur_radius = 10
cell_size = 10
pdb.plug_in_gauss_iir(img, drw, blur_radius, 1, 1)
pdb.plug_in_newsprint(img, drw, cell_size, 0, 0, 45.0, 3, 45.0, 0, 45.0, 0, 45.0, 0, 3)