【问题标题】:How to use GIMP inside a Python script?如何在 Python 脚本中使用 GIMP?
【发布时间】:2011-11-19 18:24:55
【问题描述】:

GIMP 使您能够在 Python 中制作插件,我想做的是调用 GIMP 函数,就像我在这个插件之一中所做的那样,但这会返回以下错误,因为 GIMP 没有找到任何正在运行的 GIMP Core使用。

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

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

谢谢

【问题讨论】:

  • 在你的脚本开始工作之前使用subprocess模块启动一个GIMP实例?
  • 我认为,这不是重复的,因为我明确询问如何在不使用插件的情况下执行它。我必须尝试 subprocess 调用,但我认为这会失败。

标签: python gimp


【解决方案1】:

GIMP 的 Python 扩展需要从 GIMP 实例内部运行。如果您想从 Python 使用 GIMPś API,您必须运行没有图形 UI 的 GIMP(从命令行传递 -i 参数)并运行对 api 的自定义调用 - 使用 -b 命令行参数 - 所以,您可以从命令行调用运行您的 python_fu_do_it 程序:

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

请注意,这是让 gimp-python 扩展运行的唯一方法:您必须从 GIMP 进程内部运行它。

在现实生活中,一件有用的事情可能是让您的 gimp 插件公开一些对您想要的图像执行操作的函数,并通过 xmlrpc 或 jsonrpc 服务器导出这些函数——这在 Python 中很容易完成。然后,您使用上述方法启动这个“图像服务器”,并创建独立的 python 脚本,通过 xmlrpc 调用您的 gimp 使用函数。

【讨论】:

  • 它也考虑过这种方法。您能否确认这是 100% 确定没有办法在 Python 中使用 GIMP 而不是在 GIMP 中使用 Python?
  • 作为该代码的贡献者之一,我向您确认。
  • @jsbueno 有没有什么可预见的方法可以让这一天成为可能?
  • 注意这个答案:havign GIMP 在后台运行并没有那么糟糕。你可以有一个 Python 插件来实例化一个 xml-rpc 服务器并与之交换数据——有几种方法可以做到——你只需要保持一个 GIMP 进程运行——这不是世界末日。
  • 我发现你需要添加一个 -b '(gimp-quit 1)' 或者它只是在完成后就坐在那里。如果你不想在 GIMP 中注册你的脚本,你可以直接用这个命令行运行 python:>>> gimp -i --batch-interpreter=python-fu-eval -b 'execfile("myfilename. py"); pdb.gimp_quit(1)'
【解决方案2】:

一种选择是在 gimp 中作为脚本创建一个侦听器进程(这可能对锁定 UI 有影响,此处需要进行实验),然后让它侦听 beanstalkd 工作队列。然后在您的外部进程中,在 beanstalk 队列中提出工作请求,然后 beanstalk 可以在进程外处理这些订单。

话虽如此,我可以想象 99% 的用例你都想这样做,也许 ImageMagick 比 gimp 更合适,因为它是为我想你感兴趣的任务而设计的。

【讨论】:

  • GIMP 可以在没有 UI 的情况下通过命令行启动。它工作正常,您可以将脚本放入其中以侦听作业。
【解决方案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 安装路径。

问候,卡洛。

【讨论】:

  • 您是否尝试过一些“基本工作流程”:图像加载 + 操作 + 保存? @jsbueno 告诉其他人并且是贡献者
  • 在我尝试了调用 pdb 函数的基本工作流程后,我得到了同样的错误。将 gimp 添加到 python 路径不是在没有 gimp 的情况下运行 pdb 函数的解决方案。我的错。
  • 您可以导入模块,但是如果没有运行的 GIMP,它就无法工作 - 相反,Python 以“LibGimpBase-ERROR **: gimp_wire_write_msg: the wire protocol has not been initialized”终止
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多