如何在Python脚本中使用GIMP?
GIMP 允许你用 Python 创建插件,我想做的是像在这些插件里一样调用 GIMP 的功能,但这样做时出现了一个错误,因为 GIMP 找不到正在运行的 GIMP 核心来使用。
LibGimpBase-ERROR **: gimp_wire_write_msg: the wire protocol has not been initialized aborting...
我想知道这是否可能?如果可以的话,怎么做呢?
谢谢
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安装的路径。
祝好,Karlo。
一种选择是,在GIMP里面创建一个监听进程,作为一个脚本来运行(这可能会影响到用户界面的反应,所以需要进行一些实验来看看效果)。然后让这个进程去监听一个叫做beanstalkd的工作队列。接着,在你的外部程序中,把工作请求放到这个beanstalk队列里,beanstalk就可以在独立的进程中处理这些请求。
不过,考虑到你可能想要实现的99%的使用场景,我觉得ImageMagick可能比GIMP更合适,因为它本身就是为你感兴趣的这类任务设计的。
GIMP的Python扩展需要在GIMP的环境中运行。如果你想用Python来调用GIMP的功能,你需要启动一个没有图形界面的GIMP(在命令行中加上-i
这个参数),然后用-b
这个参数来运行自定义的API调用。这样,你就可以通过命令行运行你的python_fu_do_it程序,命令如下:
gimp -i -b \(python-fu-do-it \)
请注意,这是让gimp-python扩展运行的唯一方法:你必须在GIMP的进程中运行它。
在实际应用中,一个有用的做法是让你的gimp插件提供一些可以对图像进行操作的功能,并通过xmlrpc或jsonrpc服务器导出这些功能——这在Python中很简单。然后,你可以用上面的方法启动这个“图像服务器”,并创建一个独立的Python脚本,通过xmlrpc调用你在GIMP中使用的功能。