2011-11-19 161 views
9

GIMP可以讓你在Python中製作插件,我想要做的就是調用GIMP函數,就像我在這個插件裏面做的一樣,但是這會返回以下錯誤,因爲GIMP沒有找到任何正在運行的GIMP Core來使用。如何在Python腳本中使用GIMP?

LibGimpBase-ERROR **: gimp_wire_write_msg: the wire protocol has not been initialized aborting... 

我想知道是否有可能?如果是,如何?

謝謝

+0

使用'subprocess'模塊腳本開始做工作之前啓動GIMP的實例? –

+0

[使用PHP或Python連接GIMP](http:// stackoverflow。COM /問題/ 3237252 /連接,GIMP與 - PHP-或-蟒蛇) – unutbu

+1

我認爲,這不是一個重複的,因爲我明確地問怎麼沒有插件的使用進行了。我必須嘗試子進程調用,但我認爲這會失敗。 – AsTeR

回答

11

GIMP的Python擴展需要從GIMP實例中運行。如果您想使用Python中的GIMPśAPI,則必須在沒有圖形用戶界面的情況下運行GIMP(從命令行傳遞-i參數),並使用-b命令行參數運行api的自定義調用 - 因此,您可以運行您python_fu_do_it程序,從命令行調用:

gimp -i -b \(python-fu-do-it \) 

注意,這是獲得運行GIMP-python擴展,唯一的辦法:你必須從GIMP進程中運行它。

在現實生活中,一件有用的事情可能是讓你的gimp插件公開一些對你想要的圖像執行操作的函數,並通過xmlrpc或jsonrpc服務器導出 - 這很容易在Python中完成。然後,您使用上述方法啓動此「映像服務器」,並創建通過xmlrpc調用您的gimp使用函數的獨立python腳本。

+1

它也考慮過這種方法。你能否確認這是100%確定沒有辦法在Python中使用GIMP,而不是在GIMP中使用Python? – AsTeR

+1

作爲該代碼的貢獻者之一,我向你確認。 – jsbueno

+0

@jsbueno有沒有什麼可以預見的方式呢? – magnetar

-3

我不得不說,下面的語句是不正確的:

「GIMP的Python擴展需要從一個GIMP實例中運行。」

您不必運行gimp就可以使用通過python gimpfu API公開的函數。

在任何Python程序,對於Linux只是你以下幾點:

import sys 
sys.path.append('/usr/lib/gimp/2.0/python/') 
import gimpfu 

其中 '/usr/lib/gimp/2.0/python/' 是GIMP的安裝路徑。

問候,卡羅。

+0

您是否嘗試過一些「基本工作流程」:圖片加載+操作+保存? @jsbueno告訴別人,並且是貢獻者 – AsTeR

+3

在我嘗試調用pdb函數的基本工作流程之後,我得到了同樣的錯誤。將gimp添加到python路徑不是用於在沒有gimp的情況下運行pdb函數的解決方案。我的錯。 –

+2

可以導入模塊,但沒有運行GIMP,這是行不通的 - 相反,Python和終止「LibGimpBase-ERROR **:gimp_wire_write_msg:線材協議尚未初始化 」 – jsbueno

0

一個選擇是在gimp內部創建一個偵聽器進程作爲腳本(這可能會影響鎖定UI,這裏需要進行實驗),然後讓它聽取beanstalkd工作隊列。那麼在你的外部進程中,向beanstalk隊列發出工作請求,然後beanstalk可以在進程外處理這些命令。

綜上所述,99%的使用案例我可以想象你想要做到這一點,或許ImageMagick比gimp更適合你選擇,它可以讓我想象你感興趣的任務。

+0

GIMP可以通過命令行啓動無UI。它工作正常,你可以把你的腳本放在裏面去聽工作。 – AsTeR