所以我正在用python做我的第一个gimp插件。到目前为止,它是正常工作的:
它首先为边框创建一个第二层,然后调整它的大小以适应画布,然后选择活动层的轮廓(“正常”GIMP中的Alpha to Selection ),给它加上边框,移除活动层的轮廓以保留层上的像素,然后它将边界增大1,锐化它并填充它。
但有时它似乎选择了整个层,而不是它的轮廓,这是一个GIMP错误,还是我做错了什么?
#!/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()发布于 2018-04-18 16:57:46
您的代码显示出一些关于层的混淆。脚本的"drawable“参数是脚本被调用时的活动层,所以你并不真的需要额外的" layer”参数,考虑一下"drawable“作为你的层(你甚至可以重命名函数参数)。
此外,在盒层下面添加盒层会更快/更干净,所以不需要移除任何东西(盒层隐藏了盒层的内部):
#!/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)相对于盒层偏移)。然后把桶装满..。
https://stackoverflow.com/questions/49888598
复制相似问题