GIMP Python-用颜色填充路径/向量

时间:2018-11-07 20:48:00

标签: python gimp gimpfu

我正在尝试开发一个可以在打开的SVG文件上运行的脚本。我想遍历所有路径并用任意颜色填充路径(稍后将替换这部分代码)。第一步只是遍历所有路径,我似乎无法弄清楚如何做到这一点。我的代码如下-为什么我看不到任何路径被迭代?

\x -> bool id (x:) (p x)

我还尝试了通过谷歌搜索找到的许多不同方法,包括对迭代使用更简单的方法,例如:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gimpfu import *

def plugin_main(image, layer, path):
    vectors_count, vectors = pdb.gimp_image_get_vectors(image)
    for n in vectors:
        pdb.gimp_image_select_item(image,CHANNEL-OP-REPLACE,n)
        foreground = pdb.gimp_context_get_foreground()
        pdb.gimp_edit_fill(image.layers[0], foreground)

register(
    "create_polygon_art",
    "Fills all the paths with the average color within path",
    "Fills all the paths with the average color within path",
    "Bryton Pilling",
    "Bryton Pilling",
    "2018",
    "<Image>/Filters/Fill all paths with average color",
    "RGB*, GRAY*",
    [],
    [],
    plugin_main
)

main()

但是无论我尝试什么,我似乎都无法获得路径迭代的证据。

我在Windows 10 64位系统上使用gimp 2.10.6。

1 个答案:

答案 0 :(得分:1)

这是一个陷阱... pdb.gimp_image_get_vectors(image)返回路径的整数ID列表,但是以后的调用需要一个gimp.Vectors对象。

image.vectors确实是gimp.Vectors的列表,您可以使用

迭代所有路径。
for vector in image.vectors:

更多问题:

  • 您在register()中声明了两个args,但函数中具有了三个。实际上,您不需要path参数,因为您无论如何都要对其进行迭代。
  • 函数的layer参数是调用插件时的活动层,通常是您要绘制的层
  • gimp-edit-fill使用一种颜色而不是一种颜色。当您进一步处理代码时,必须设置前景色,并推送/弹出上下文
  • CHANNEL-OP-REPLACE不是有效的Python符号,在Python中,您应该使用CHANNEL_OP_REPLACE(带下划线)

两个Python脚本集合herethere

如果您使用的是Windows,则有些提示可以调试脚本here

您的代码已修正:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gimpfu import *

def plugin_main(image, layer):
    for p in image.vectors:
        pdb.gimp_image_select_item(image,CHANNEL_OP_REPLACE,p)
        pdb.gimp_edit_fill(layer, FOREGROUND_FILL)

register(
    "create_polygon_art",
    "Fills all the paths with the average color within path",
    "Fills all the paths with the average color within path",
    "Bryton Pilling",
    "Bryton Pilling",
    "2018",
    "<Image>/Test/Fill all paths with average color",
    "RGB*, GRAY*",
    [],
    [],
    plugin_main
)

main()

您可以通过绘制“笔画”来使代码更人性化(因此,一条路径有多个笔画)。如果要对笔划进行单个选择,可以将其复制到临时路径。可以在上面的集合中的某些脚本中找到用于此目的的代码。