- 用python快炒GIMP plug-ins □ 文/Mat
GIMP是自由軟體中重量級的圖像處理軟體。而他最為人樂道的一點,便是能在提供專業完整的功能的同時,又能保持平易近人的介面。大多數功能,用滑鼠即可發揮驚人的效率,然而熟練的鼠技,真的足以發揮GIMP百分之百的效能嗎...?!
GIMP是自由軟體中重量級的圖像處理軟體。而他最為人樂道的一點,便是能在提供專業完整的功能的同時,又能保持平易近人的介面。大多數功能,用滑鼠即可發揮驚人的效率,然而熟練的鼠技,真的足以發揮GIMP百分之百的效能嗎...?!
在作圖像處理時,最煩惱的常常是遇到堆積如山的圖片。比如說,這次出遊外拍殺了幾百張照片。當你想要把他們全部縮放到800x600的大小,或是像轉成灰階、作邊框、...之類的處理,難道我們真的要像機器人一樣的重複的用滑鼠來來去去幾百次嗎!? 相信我,GIMP是絕對不建議你這麼作的:-) 為了保護你的肝,讓我們來用簡單易用的python來炒一道GIMP Plug-in.
(在這裡,就先假設你已經先裝好GIMP,GIMP-Python的軟體)
就舉縮放到800x600的任務來作例子吧. 首先,一般的操作,我們都是用同樣的動作:
打開檔案 File>>Open
滑鼠點選縮放的功能和參數 Image>>Scale Image
存檔 File>>Save as
如果這每一個動作都能一個個分解開來,各自組合,那就成了. 是的,這就是GIMP一個最重要的特色:
每一個操作,都對應到一個獨立的程式元件
只要你的滑鼠點得出來(除了美感之類的感官判斷),Plug-ins也一樣可以作得到!
這些程式元件在那裡呢? 點選選單中的Xtns>>Procedure Browser,你就可以看到完整的列表和程式元件的說明.
而你最關心的Plug-in要怎麼寫呢? 最重要的動作不外乎:
訂作一個你喜歡的 function
把這個function依照正確的格式給GIMP註冊.
所以整個plug-in的樣子像是:
#!/usr/bin/env python def repeat_resize ... ... register( ..., ..., repeat_resize, ...) main() #固定格式
GIMP-Python把Plug-ins所需要的東西包在gimpfu這個module裡面. 當然,程式元件庫(Procedure DataBase)也包在裡面,叫作pdb. 在任務過程中,我們也需要讀取資料夾,因此也需要用到 os這個模組.
#!/usr/bin/env/python from gimpfu import * import os
緊接著,我們用python作個簡單的迴圈,選取指定目錄夾(IMG_PATH)下的檔案
def repeat_resize(...,IMG_PATH,...) dir = os.listdir( IMG_PATH ) for file in dir: filename=IMG_PATH+"/"+file #檔案的絕對路徑 ... filename2=IMG_PATH+"/"+"800x600_"+file #另存新檔,並在檔頭加上800x600開頭,以示區別
之後就是最關鍵的部份了: 在程式元件庫可以找到我們需要的幾個元件.分別是
打開檔案 |
file_jpeg_load |
滑鼠點選縮放的功能和參數 |
gimp_image_scale |
存檔 |
file_jpeg_save |
另外有一個要特別注意的地方是,Image和Drawable這兩個類別的分別. 在GIMP中,Image是廣義的圖像物件(包含許多參數跟Layers、Channel)。 Image本身是沒辦法直接加工的,你可以把它想成是唯讀的。 GIMP把可以加工的部分另外定成Drawable(可讀寫)的類別. 因此,在用gimp_image_xxxx操作之前,我們要先用gimp_image_active_drawable把Image活化成Drawable.
img = pdb.file_jpeg_load( filename,filename ) drw = pdb.gimp_image_active_drawable( img ) pdb.gimp_image_scale(img,800,600) ... pdb.file_jpeg_save(img,drw,filename2,filename2,0.75, 0.00,1,0,"Created with GIMP", 0,1, 0,0)
最後,依照GIMP Plug-in的慣例來註冊. 名字,文字說明,日期,...簡單的參數依樣畫葫蘆就好了.
其中比較要注意的,就是使用者參數的輸入格式:
型別 |
參數名字 |
參數用途 |
預設值 |
PF_STRING |
IMAGE |
The path,which stores images |
./ |
PF_INT32 |
font_size |
Font size in pixel |
16 |
PF_COLOR |
bg_color |
Background Color |
white |
..。 |
..。 |
..。 |
..。 |
相信聰明的你很快就抓到訣竅了
另外,選單的位置也可以由你決定:
選單位置範例 |
<Toolbox>/Xtns/Python-Fu/repeat-resize |
<Image>/repeat-resize |
<Image>/Python-Fu/Alchemy/Clothify/repeat-resize |
..。 |
register( "repeat_resize" #plug-in的名字 "Scale image size to 800x600" #用途說明 "Scale image size to 800x600" #同上 "Mat Lee" #作者 "Mat Lee" #同上 "2006.12.15" #日期 "<Image>/RepeatResize" #選單的位置 "RGB*,GRAY*",#適合的色彩類別 [ (PF_STRING,"IMG_PATH","The path,which stores images","./" )],#使用者輸入的參數 [], repeat_resize ) #要註冊進去的函式
最後把這些全部兜在一起,就是完整的plug-in了:
服用方式,只要把repeat_resize.py 丟到 "~/.gimp/plug-ins/" 這個資料夾下,重新啟動GIMP就可以了。
GIMP-Python plug-ins沒有艱深的語法和痛苦的編譯加除錯。 只要發揮耐心,嘗試幾次錯誤,就能小兵立大功。 而撰寫過程中又能體驗GIMP強大的功能跟簡明的模組化架構,現學現賣又實用. 你說,這爽度是不是120%呢?
附註:
測試平台為 Debian 3.1 stable,GIMP version 2.2
好站加料
Writing a GIMP Plug-In 簡易的英文入門文件
Effect preview of GIMP Plug-in 常用plug-ins測試評效
shrink this item