Примените слои слияния к нескольким изображениям, не теряя слои - PullRequest
1 голос
/ 01 апреля 2011

Моя проблема: Я хочу сделать много изображений, которые отличаются только тремя текстовыми слоями. Я уже понял, как вносить изменения в текст с помощью консоли Python-Fu. Мой следующий шаг - поместить этот код изменения текста в цикл и добавить png.file-save-png(...) для сохранения изображения. Чтобы сохранить в формате PNG, я должен объединить все свои слои (для каждого изображения), что не проблема для single_layer = pdb.gimp-image-merge-visible-layers(image,0) Чтобы продолжать работать отсюда, мне нужно отменить, чтобы вернуть мои старые слои.

Нужно ли применять операцию UNDO в GIMP из сценария?

Мне не удалось найти подсказки по этой функции. Может быть, кто-нибудь знает, как это сделать, или есть обходной путь.

1 Ответ

3 голосов
/ 01 апреля 2011

После ночи сна я нашел обходной путь:

Я снова открыл файл базового изображения для каждой карты в цикле, где все слои и текстовые слои остались без изменений. Это помешало мне отменить отмену.

Кстати, вот мой скрипт для создания игральных карт 4 * 13 (из собственных base_card.xcf):

basefile = "/home/[...]/base_card.xcf"
basesave = "/home/[...]/"

color_blue      = [ (32.0 /255.0, 74.0/255.0,135.0/255.0,1.0),
                    (52.0 /255.0,101.0/255.0,164.0/255.0,1.0)]

color_red       = [ (164.0/255.0,  0.0/255.0,  0.0/255.0,1.0),
                    (204.0/255.0,  0.0/255.0,  0.0/255.0,1.0)]

color_yellow    = [ (196.0/255.0,160.0/255.0,  0.0/255.0,1.0),
                    (237.0/255.0,212.0/255.0,  0.0/255.0,1.0)]

color_green     = [ ( 78.0/255.0,154.0/255.0,  6.0/255.0,1.0),
                    (115.0/255.0,210.0/255.0, 22.0/255.0,1.0)]   

def createCard(color_list, color_name, number):
    pdb.gimp_context_set_foreground(color_list[1])
    image = pdb.gimp_file_load(basefile, basefile)
    textlayers = image.layers[0:3]
    for layer in textlayers:
        pdb.gimp_text_layer_set_text(layer, number)
        pdb.gimp_text_layer_set_color(layer, color_list[0])
    layer = image.layers[3]
    pdb.gimp_edit_bucket_fill(layer, 0, 0, 100, 0, 0, 30, 30)
    layer = pdb.gimp_image_merge_visible_layers(image, 0)
    savename = "%s%s_%s.png" % (basesave, color_name, number)
    pdb.file_png_save(image, layer, savename, savename, 0, 0, 0, 0, 0, 0, 0)
    image = None

for c in range(1,14):
    createCard(color_blue, "BLUE", c)
for c in range(1,14):
    createCard(color_yellow, "YELLOW", c)
for c in range(1,14):
    createCard(color_red, "RED", c)
for c in range(1,14):
    createCard(color_green, "GREEN", c)
...