我有一个主图像,我在gimp中编辑以获得想要的外观和感觉。然后,我想使用python脚本生成一堆新图像,文本(在几个不同的图层上)已更改。我想单独留下字体,大小,斜体或不依旧等。
我已使用此功能成功更改了批处理脚本中的文本:
pdb.gimp_text_layer_set_text(layer, text)
问题是这也会覆盖我在主文件中选择的字体和其他文本参数。有没有办法改变只是文本并保留字体?
或者,更笨重的方法是尝试在更改之前保存关于字体的所有重要内容并尝试重新应用它。这就是我尝试过的:
# Find the text layer
text1_layer = filter(lambda x: x.name == 'text1', im.layers)[0]
# Save the font
font = pdb.gimp_text_layer_get_font(text1_layer)
font_size, font_unit = pdb.gimp_text_layer_get_font_size(text1_layer)
# Set the text
pdb.gimp_text_layer_set_text(text1_layer, tex1_text)
# Restore the font
pdb.gimp_text_layer_set_font(text1_layer, font)
pdb.gimp_text_layer_set_font_size(text1_layer, font_size, font_unit)
不幸的是,这似乎并不一致。看起来get_font和get_font_size命令检索其中一个图层的正确字体,但不检索其他图层的正确字体。它似乎没有保留斜体等,我不希望它保留文本是否加下划线。
第三种选择是字体中的硬编码。我需要浏览所有文本字段,找出字体参数是什么,并为每个字体参数进行硬编码。然后,如果我重新设计主文件(我会做很多),我必须重复这个过程。这不是必要的。
答案 0 :(得分:1)
不是一个令人满意的答案,但是太大而无法发表评论。
是的,文本图层API未更新以遵循新功能。实际上所有信息都在gimp-text-layer
"寄生虫":
parasites=layer.parasite_list()
if parasites and 'gimp-text-layer' in parasites:
data=layer.parasite_find('gimp-text-layer').data
pdb.gimp_message('Text layer "%s": %s' % (layer.name,data))
在图像至少保存一次之前,这种寄生虫似乎不存在。
然而,即使您可以替换寄生虫数据,它也不会改变文本层,并且使情况变得更糟,似乎Gimp检测到更改,假设图层文本数据已损坏,并且保存图像时,图层是一个普通的位图。
现在,仔细阅读源代码,您可以在SourceForge上找到 GDynText 插件,并将其宣传为:
GIMP动态文本是一个GIMP插件,其工作方式与文本工具类似,但允许您编写多行文本,并且可以随后根据需要进行修改(文本/字体/字体大小/颜色/ ...)。
所以你可能很幸运,或者不是......
答案 1 :(得分:0)
我已经做了一些研究并找到了一个适合我的gimp解决方案,但是,听起来你可能应该使用gimp以外的东西,比如imagemagick,如果你正在做的话从脚本编辑很多文本。
解决方案是,当您在gimp编辑器中更改文本时,您需要更改工具对话框中的字体,以便将其设置为图层的属性,而不是只需选择文本并更改显示的浮动字体框中的字体 - 更改所选文本的字体,但保留文本图层的基本字体。
事实证明,gimp文本功能非常糟糕,并且有大量关于此类问题的投诉。对未来有一些希望。显然gimp支持文本的标记语言。您可以通过以下方式获取文本标记:
pdb.gimp_text_layer_get_markup(layer)
不幸的是,没有set_markup功能 - 即使它已被评论并要求使用3 - 5年,所以不要屏住呼吸。如果存在这样的函数,则get_markup和set_markup函数将使脚本完全控制文本。但是,它并不存在,因此如果您想要更改文本片段(例如,将斜体添加到单词),则必须创建单独的图层。如果所有文本的格式都相同,则可以通过脚本或编辑器进行编辑,只要在文本图层属性中设置它(通过编辑器中的工具框完成),你可以在脚本中更改字体的唯一方法),然后脚本中的set_text函数将保留字体等。
https://bugzilla.gnome.org/show_bug.cgi?id=724101
http://gimpchat.com/viewtopic.php?f=9&t=10101&p=132782&hilit=change+text+markup#p132782