Плагин Python_fu не будет загружаться в GIMP

Я пытаюсь написать плагин gimp, используя python_fu. Я хочу, чтобы он взял много слоев одинакового размера и поместил их в вертикальную линию. Это будет использоваться для открытия файлов PDF, где каждая из страниц занимает один слой, и плагин поместит их в строку. Когда я запускаю плагин, в меню ничего не появляется. Когда я закомментирую строку со звездочкой над ней, плагин загружается в меню.

% USERPROFILE%\. Садомазо-2,8\ плагины \Array.py

from gimpfu import *

def plugin_main(timg, tdrawable, widthNum, heightNum):

    layers = gimp-image-get-layers(timg) #<< Gets a list of all the layers

    #Sets the WIDTH and HEIGHT to the size of the first image
    WIDTH = layers[0].width
    HEIGHT = layers[0].height

    #Loops through all layers and moves them
    for i in range(layers.length):
        location = float((i+1)*HEIGHT)
        #*****
        transformedimage = gimp-item-transform-2d(layers[i], 0.0, 0.0, 1.0, 1.0, 0.0, location) #<< When I comment this line out the plugin loads

    gimp-image-resize-to-layers() #<< Resizes the image to fit the moved layers

register(
        "python_fu_array",
        "Sets out your layers as tiles",
        "Sets out your layers as tiles",
        "author",
        "author",
        "2016",
        "<Image>/Image/Array",
        "RGB*, GRAY*",
        [],
        [],
        plugin_main)

main()

2 ответа

Посмотрите на некоторые существующие плагины на основе Python, например, https://git.gnome.org/browse/gimp/tree/plug-ins/pygimp/plug-ins/py-slice.py

Обратите внимание, как там вызываются некоторые процедуры, например, в строке 168: https://git.gnome.org/browse/gimp/tree/plug-ins/pygimp/plug-ins/py-slice.py

temp_image = pdb.gimp_image_new (...)

В вашем коде есть два отличия:

  1. префикс pdb
  2. подчеркивание вместо дефисов / минусов

Измените свой плагин, чтобы сделать это так, и вы получите еще несколько шагов.

В дополнение к замечанию Майкла, интерфейс Python-fu определяет объекты и классы в стиле Python для многих концепций Gimp, поэтому вы можете очень часто избегать использования функций pdb.*. Например, чтобы перебрать слои изображения:

Ваш код: слои = gimp-image-get-Layers(Timg) #<< Получает список всех слоев

#Sets the WIDTH and HEIGHT to the size of the first image
WIDTH = layers[0].width
HEIGHT = layers[0].height

#Loops through all layers and moves them
for i in range(layers.length):

Лучший код:

# better use the image height/width, layer h/w can be different
width=image.width
height=image.height

for position,layer in enumerate(image.layers):
    # etc....

Мы все делаем ошибки. Вы можете отсеять свои самые большие синтаксические ошибки, даже не запуская Gimp, вызывая Python для своего скрипта в командной строке. Если вы будете жаловаться на gimpfu, у вас будет хороший шанс, что он будет работать под Gimp.

  • Для хорошего начинающего Python совет: www.python-forum.io
  • Для хорошего новичка Gimp Python совет: www.gimp-forum.net
Другие вопросы по тегам