[Part I. GIMP基礎功]

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

14.3 Python-Fu 物件的 reference 與物件的 id

gimp.image_list() 與 pdb.gimp_image_list() 是不同的
  • 不同之處:
    • pdb.gimp_image_list(...) 回傳值為影像的 id
    • pdb.gimp.image_list() 回傳值為影像的 reference
  • 使用時機:
    • Python-Fu 雖然也可以取得物件的 id ,但使用函數時,例如,pdb.gimp_display_new(img),參數 img 其型態,並不是物件的 id ,而是物件的 reference 。
    • 因此,Python-Fu 雖然有 pdb.gimp_image_list(...) ,但幾乎用不到,而是使用 pdb.gimp.image_list()


要會區別「影像 id」與「影像 reference」
  • Python-Fu 的 pdb.gimp_image_list(...) 相當於 Script-Fu 的 (gimp-image-list ...)
  • Python-Fu 的 pdb.gimp.image_list() ,你可以說,在 Script-Fu 之中,它沒有對應的函數,也可以說,它的對應函數還是 (gimp-image-list ...)

  • 雖然, Python-Fu 的函數與 Script-Fu 的函數 ,除了底線 _ 減號 - 的差異,名稱幾乎相同。
  • 但是,使用時,要注意,函數的傳入值型態,「影像 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」的差別,你可能要在 C 語言的指標與物件導向程式的語法多下點功夫。