Я пытаюсь сделать плагин для gimp, который открывает два изображения как отдельные слои и трансформирует одно из них (подробнее об этом ниже). Я использую GIMP 2.10.12.
Я изо всех сил пытался найти надлежащую полную документацию для интерфейса GIMP Python и в основном просто работаю с фрагментами кода, которые мне удалось найти. Это то, что у меня есть до сих пор:
#!/usr/bin/env python2
import os
from gimpfu import *
def load_pair(img_f):
mask_f = img_f.replace(IMG_DIR, PRED_DIR)
result_f = os.path.splitext(img_f.replace(IMG_DIR, SAVE_DIR))[0]
result_dir = os.path.dirname(result_f)
if not os.path.isdir(result_dir):
os.makedirs(result_dir)
img = gimp.Image(100, 100)
pdb.gimp_display_new(img)
for f, name, pos in ((img_f, "Image", 0), (mask_f, "Mask", 1)):
layer = pdb.gimp_file_load_layer(img, f)
pdb.gimp_layer_set_name(layer, name)
pdb.gimp_image_insert_layer(img, layer, None, pos)
register(
"python_fu_open_image_pair",
...,
"<Toolbox>/Image/Open Image Pair",
"",
[(PF_FILE, "img_f", "Image:", None)],
[],
load_pair
)
main()
Этот вид делает то, что я хочу, но с парой проблем.
Вопрос 1
В настоящее время я использую gimp.Image(100, 100)
для открытия нового изображения. Это означает, что я должен затем подогнать холст к слоям и настроить масштаб и положение каждый раз, когда я загружаю новую пару изображений.
Есть ли способ узнать размер изображения из pdb перед его открытием или мне нужно использовать для этого другую библиотеку (например, PIL)? Я пытаюсь свести зависимости моего плагина к минимуму.
Два изображения гарантированно имеют одинаковый размер.
Поскольку File->Open автоматически настраивает холст в соответствии с размером изображения, я надеюсь, что это будет хороший способ добиться этого.
вопрос 2
Я хотел бы автоматически создать и установить для текущего рабочего файла значение result_f + '.xcf'
(см. код выше) - так, чтобы Файл -> Сохранить автоматически сохранялся в этот файл. Возможно ли это в pdb?
Вопрос 3
Самое главное, в настоящее время у меня есть изображения маски, сохраненные как черно-белые изображения. При загрузке маски в качестве нового слоя я хотел бы преобразовать черный цвет в прозрачный, а белый цвет в зеленый (0,255,0). Кроме того, поскольку они сохраняются в виде изображений .jpg, яркость белого и черного не обязательно точно соответствует 255 и 0, но может немного отличаться.
Как мне сделать это автоматически в моем плагине?