从外部模块调用gimp-fu函数

时间:2016-05-06 23:50:14

标签: python wrapper gimp gimpfu

我正在尝试为GIMP编写一种包装库,以使我的生成艺术项目更容易,但我遇到了与我的包装模块中的gimpfu接口的问题。以下插件代码运行正常,并显示一个横跨它绘制水平线的图像:

request.POST.getlist('tags[]')
# outputs : ['1', '2', '3']
request.POST.getlist('tags[]')[1]
# outputs : '2'

'' class在basicObjects中定义,并且按预期运行,但是如果我尝试替换' pdb.gimp_pencil(background,Line.pointcount,Line.printpoints())'使用' Line.draw(背景)',并在行类中添加draw()函数,如下所示:

from gimpfu import *
from basicObjects import *

def newFilt() :
    img = gimp.Image(500, 500, RGB)
    background = gimp.Layer(img, "Background", 500, 500,RGB_IMAGE, 100, NORMAL_MODE)
    img.add_layer(background, 1)
    background.fill(BACKGROUND_FILL)
    pdb.gimp_context_set_brush('1. Pixel')
    pdb.gimp_context_set_brush_size(2)
    for i in range(100):
        Line= line([(0,5*i),(500,5*i)])
        pdb.gimp_pencil(background,Line.pointcount,Line.printpoints())
    gimp.Display(img)
    gimp.displays_flush()

register(
    "python_fu_render",
    "new Image",
    "Filters",
    "Brendan",
    "Brendan",
    "2016",
    "Render",
    "",
    [],
    [],
    newFilt, menu="<Image>/File/Create")

main()

图像未呈现,并且gimp错误控制台中没有显示消息。如何从外部文件进行pdb调用?是否会以某种方式使包装器成为一个单独的插件?

3 个答案:

答案 0 :(得分:1)

第一: gimp和gimp-fu模块仅在Python脚本作为插件运行时才能在GIMP中运行。我不知道你称之为“外部文件” - 但入口点始终是一个插件脚本。它可以像任何普通程序一样导入其他Python模块。

第二:GIMP插件运行是Python 2.x(目前为2.7) - 因此任何声明的类都应该从object继承 - 声明一个类而不继承对象,因为你只会带来意想不到的问题 - 虽然现在可能不是你的问题。

类声明看起来没问题,但是你调用它的例子没有 - Line.draw(background)似乎表明你试图在类本身上调用方法,而不是在line类的实例上。

答案 1 :(得分:1)

是的,正如已经指出的那样,gimpfu和gimp模块只能在gimp应用程序中运行,或者需要进行大量的黑客操作才能创建重复的环境,如果没有gimp的话,从脚本中运行gimp扩展和插件将非常酷应用程序开销,但这基本上是能够同时吃蛋糕的情况。如果您不需要从gimp可得到的所有滤镜和效果,可以考虑使用PIL / Pillow模块。它们没有gimp的功能,但是具有图形图像处理的所有基本功能。它们可以在python2或3中正常运行,并且比gimp快得多。

答案 2 :(得分:0)

是的,可以执行存储在磁盘上任何位置的 python-fu 脚本,可能使用 PYTHONPATH 和 DYLD_LIBRARY_PATH。