使用gimp fu,我可以保存一个层的内容(至少,这就是我解释gimp_file_save
定义的方式,因为它采用参数drawable
)
现在,我有以下脚本:
from gimpfu import *
def write_text():
width = 400
height = 100
img = gimp.Image(width, height, RGB)
img.disable_undo()
gimp.set_foreground( (255, 100, 20) )
gimp.set_background( ( 0, 15, 40) )
background_layer = gimp.Layer(
img,
'Background',
width,
height,
RGB_IMAGE,
100,
NORMAL_MODE)
img.add_layer(background_layer, 0)
background_layer.fill(BACKGROUND_FILL)
text_layer = pdb.gimp_text_fontname(
img,
None,
60,
40,
'Here is some text',
0,
True,
30,
PIXELS,
'Courier New'
)
drawable = pdb.gimp_image_active_drawable(img)
# Either export text layer ...
# pdb.gimp_file_save(img, drawable, '/temp/tq84_write_text.png', '?')
# .... or background layer:
pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?')
register(
proc_name = 'tq84_write_text',
blurb = 'tq84_write_text',
help = 'Create some text',
author = 'Rene Nyffenegger',
copyright = 'Rene Nyffenegger',
date = '2014',
label = '<Toolbox>/Xtns/Languages/Python-Fu/_TQ84/_Text',
imagetypes = '',
params = [],
results = [],
function = write_text
)
main()
当我使用pdb.gimp_file_save(img, drawable, '/temp/tq84_write_text.png', '?')
保存图像时,它只会导出“文本”图层。然而,如果我使用pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?')
,它只会导出背景。那么,如何将两个图层导出到一个图像中(如File -> Export As
菜单那样)。
答案 0 :(得分:11)
内部完成的工作,即使是所有formnats的GIMP文件 - expoerter插件:复制图像,合并所有可见图层,它们保存得到的drawable。
这比听起来更容易,占用的资源更少。实际上你只需要更换你的保存线
pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?')
通过
new_image = pdb.gimp_image_duplicate(img)
layer = pdb.gimp_image_merge_visible_layers(new_image, CLIP_TO_IMAGE)
pdb.gimp_file_save(new_img, layer, '/temp/tq84_write_text.png', '?')
pdb.gimp_image_delete(new_image)
(最后一次通话&#34;删除&#34;程序内存中的新图像,当然释放资源)
答案 1 :(得分:1)
我发现如果将None
作为drawable
参数传递给gimp_xcf_save()
,GIMP(至少版本2.8)会将图像的所有图层保存到XCF文件中:
pdb.gimp_xcf_save(0, image, None, 'file.xcf', 'file.xcf')
答案 2 :(得分:0)
我发现最简单的方法是将图像弄平,然后仅使用第一层进行保存:
img.flatten()
pdb.gimp_file_save(img, img.layers[0], 'image.jpg', '?')