Плагин 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 (...)
В вашем коде есть два отличия:
- префикс pdb
- подчеркивание вместо дефисов / минусов
Измените свой плагин, чтобы сделать это так, и вы получите еще несколько шагов.
В дополнение к замечанию Майкла, интерфейс 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