Я пытаюсь создать плагин для gimp, который открывает два изображения в виде отдельных слоев и трансформирует один из них (подробнее об этом ниже). Я использую GIMP 2.10.12.
Я изо всех сил пытался найти правильную полную документацию для интерфейса Python в GIMP и в основном просто работаю с теми фрагментами кода, которые мне удалось найти. Это то, что у меня пока есть:
#!/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)
, чтобы открыть новое изображение. Это означает, что мне нужно затем подогнать Canvas к слоям и корректировать масштаб и положение каждый раз, когда я загружаю новую пару изображений.
Есть ли способ найти размер изображения в pdb перед его открытием или мне нужноиспользовать другую библиотеку (например, PIL) для этого? Я пытаюсь свести к минимуму зависимости моего плагина.
Оба изображения гарантированно имеют одинаковый размер.
Поскольку File-> Open автоматически подстраивает холст к размеру изображения,Я надеюсь, что был бы хороший способ добиться этого.
Вопрос 2
Я хотел бы автоматически создать и установить текущий рабочий файл result_f + '.xcf'
(см. Код выше) -такой, что Файл -> Сохранить автоматически сохранит в этот файл. Возможно ли это в pdb?
Вопрос 3
Самое главное, у меня в настоящее время хранятся изображения маски в виде черно-белых изображений. После загрузки маски в качестве нового слоя я хотел бы преобразовать черный цвет в прозрачный и белый цвет в зеленый (0,255,0). Кроме того, поскольку они сохраняются в виде изображений .jpg, белый и черный не обязательно имеют интенсивность 255 и 0, но могут быть отключены постепенно.
Как мне сделать это автоматически в моем плагине?