首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gimp python-fu创建简单边框

gimp python-fu创建简单边框
EN

Stack Overflow用户
提问于 2018-04-18 06:48:17
回答 1查看 1.1K关注 0票数 0

所以我正在用python做我的第一个gimp插件。到目前为止,它是正常工作的:

它首先为边框创建一个第二层,然后调整它的大小以适应画布,然后选择活动层的轮廓(“正常”GIMP中的Alpha to Selection ),给它加上边框,移除活动层的轮廓以保留层上的像素,然后它将边界增大1,锐化它并填充它。

但有时它似乎选择了整个层,而不是它的轮廓,这是一个GIMP错误,还是我做错了什么?

代码语言:javascript
复制
#!/usr/bin/env python

from gimpfu import *
import time

def white_box(img, drawable, thickness = 5, layer = None):

    pdb.plug_in_autocrop_layer(img, drawable)

    # layer = pdb.gimp_image_get_active_layer(img)  
    box = pdb.gimp_layer_new(img, 1, 1, 1, pdb.gimp_item_get_name(layer) + "_white box", 100, 0)
    pdb.gimp_image_insert_layer(img, box, None, -1)

    pdb.gimp_layer_resize_to_image_size(box)
    # pdb.gimp_layer_resize_to_image_size(layer)

    pdb.gimp_image_select_item(img, 0, layer)
    pdb.gimp_message("Selected layer")
    # pdb.gimp_edit_fill(drawable, 2)
    time.sleep(1)


    pdb.gimp_selection_border(img, thickness)
    pdb.gimp_message("Selected a border with a thickness of " + str(thickness))
    time.sleep(1)

    pdb.gimp_image_select_item(img, 1, layer)
    pdb.gimp_message("Removed layer from selection")
    time.sleep(1)

    pdb.gimp_selection_grow(img, 1) 
    pdb.gimp_message("Grew selection")
    time.sleep(1)

    pdb.gimp_selection_sharpen(img)
    pdb.gimp_message("Sharpened")
    time.sleep(1)

    pdb.gimp_image_set_active_layer(img, box)

    pdb.gimp_edit_fill(pdb.gimp_image_get_active_drawable(img), 2)

    pdb.plug_in_autocrop_layer(img, drawable)
    pdb.plug_in_autocrop_layer(img, pdb.gimp_image_get_active_drawable(img))

register(
    "python_fu_white_box",
    "Create White Box",
    "Create a white box around active layer",
    "Misha Smit",
    "Misha Smit",
    "2018",
    "White Box...",
    "RGBA",      # Create a new image, don't work on an existing one
    [
        (PF_IMAGE, "img", "Image", None),
        (PF_DRAWABLE, "drawable", "Drawable", None),
        (PF_INT, "thickness", "Box Thickness", 5),
        (PF_LAYER, "layer", "LAYER:", None)
    ],
    [],
    white_box, menu="<Image>/Filters/Render")

main()
EN

回答 1

Stack Overflow用户

发布于 2018-04-18 16:57:46

您的代码显示出一些关于层的混淆。脚本的"drawable“参数是脚本被调用时的活动层,所以你并不真的需要额外的" layer”参数,考虑一下"drawable“作为你的层(你甚至可以重命名函数参数)。

此外,在盒层下面添加盒层会更快/更干净,所以不需要移除任何东西(盒层隐藏了盒层的内部):

代码语言:javascript
复制
#!/usr/bin/env python

from gimpfu import *
import time

def white_box(img, layer, thickness = 5):

    pdb.plug_in_autocrop_layer(img, layer)

    # Create the box layer with the image size
    box = pdb.gimp_layer_new(img, img.width,img.height, RGBA_IMAGE, layer.name + "_white box", 100, NORMAL_MODE)
    # Insert it **below** the boxed layer
    pdb.gimp_image_insert_layer(img, box, None, 1+pdb.gimp_image_get_item_position(img, layer)) 
    pdb.gimp_image_select_item(img, 0, layer)
    print("Selected layer")

    pdb.gimp_selection_grow(img, thickness)

    #pdb.gimp_selection_sharpen(img)
    #print("Sharpened")

    pdb.gimp_edit_fill(box, 2)

    pdb.plug_in_autocrop_layer(img,box)

register(
    "python_fu_white_box",
    "Create White Box",
    "Create a white box around active layer",
    "Misha Smit",
    "Misha Smit",
    "2018",
    "White Box...",
    "RGBA",     
    [
        (PF_IMAGE, "img", "Image", None),
        (PF_DRAWABLE, "drawable", "Drawable", None),
        (PF_INT, "thickness", "Box Thickness", 5),
    ],
    [],
    white_box, menu="<Image>/Test/")

main()

除非您真的想要圆角,否则更快的方法是使用盒层的宽度/高度加上厚度*2来创建盒层,然后使用层偏移来定位它((-thickness,-thickness)相对于盒层偏移)。然后把桶装满..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49888598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档