2011-11-19 52 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