Введение в написание расширений для GIMP на Python
Почти все пользователи Linux для редактирования фотографий используют GIMP.
Рано или поздно возникает вопрос о том, как автоматизировать выполнение тех
или иных действий.
Конечно, можно написать сценарий на Script-Fu (вариант Scheme для GIMP), но
лучше воспользоваться Python, поскольку писать на нём гораздо проще. В этой
статье рассматриваются основы написания сценариев на Python.
Что следует знать перед началом работы.
Во-первых, должен быть установлен Python, а также расширение gimp-python,
которое позволяет использовать Python для написания расширений.
Во-вторых, расширения, сохранённые в каталог /home/пользователь/.gimp-2.2
/plug-ins, будут доступны только одному пользователю, сохранённые в
/usr/lib/gimp/2.0/plug-ins — всем.
В-третьих, самостоятельно добавленные расширения должны быть исполняемыми.
Есть несколько способов сделать это — от изменения атрибутов через диалог
свойств файла в Nautilus или Konqueror до команды 'chmod +x имя_сценарий.py'.
Теперь приступим.
На этом всё. Подробнее о создании сценариев на Python для GIMP можно
узнать из документации на английском языке.
Источники:
linuxgraphics.ru
- Запустите GIMP.
- В меню /Расш./Python-Fu запустите Console.
- Для загрузки файла и открытия окна GIMP выберите в окне консоли Browse.
- Этот браузер позволяет просмотреть все процедуры GIMP. Найдите процедуру загрузки файлов JPEG, которая называется file_jpeg_load. Справа в браузере описан тип данных которые передаются этой процедуре и которые выдаёт она. Чуть ниже приведена краткая справка.
- Нажмите кнопку «Применить».
- Измените "image = pdb.file_jpeg_load(/home/пользователь/image1.jpg, 1)". pdb указывает, что используется процедура из базы данных процедур GIMP (Procedure Database). Все эти процедуры можно добавлять прямо из браузера, а затем по обстоятельствам редактировать.
- Теперь переменная image хранит изображение.
- Посмотреть изображение можно так: "gimp.Display(image)".
- Для определения рабочей области воспользуйтесь "drawable = pdb.gimp_image_get_active_drawable(image)".
- Так можно определить высоту и ширину рабочей области: "height,width=drawable.height, drawable.width".
- Так эти параметры можно посмотреть: "height, width".
- Так можно инвертировать цвета: "pdb.gimp_invert(drawable)".
- Добавьте новый слой прозрачностью в 50%: "layer = pdb.gimp_layer_new(image, width, height, 0, "new_layer", 50, 0)".
- Сделайте его видимым в диалоге слоёв: "image.add_layer(layer, 0)".
- Залейте его цветом, установленным как цвет переднего плана: "pdb.gimp_edit_fill(layer, 1)".
- Объедините все видимые слои: "layer = pdb.gimp_image_merge_visible_layers(image, 0)".
#!/usr/bin/env python import math #импортируется модуль math from gimpfu import * #импортируются функции из GIMP def python_clothify(timg, tdrawable, bx=9, by=9, azimuth=135, elevation=45, depth=3): #процедуре передаются значения, полученные из диалога; timg и tdrawable #говорят о том, что будут использоваться открытый рисунок и рабочая область width = tdrawable.width #замеряем высоту height = tdrawable.height img = gimp.Image(width, height, RGB)#создаётся рисунок img.disable_undo() #на время работы программы выключается возможность редактирования #рисунка пользователем layer_one = gimp.Layer(img, "X Dots", width, height, RGB_IMAGE, 100, NORMAL_MODE)#создаётся слой img.add_layer(layer_one, 0)#слой добавляется в рисунок... pdb.gimp_edit_fill(layer_one, BACKGROUND_FILL)#... и заливается цветом pdb.plug_in_noisify(img, layer_one, 0, 0.7, 0.7, 0.7, 0.7) #используется расширение c соответствующим названием, ему передаются параметры. layer_two = layer_one.copy()#еще один слой создаётся копированием layer_two.mode = MULTIPLY_MODE layer_two.name = "Y Dots"#имя слоя img.add_layer(layer_two, 0)#добавляется слой в рисунок pdb.plug_in_gauss_rle(img, layer_one, bx, 1, 0) pdb.plug_in_gauss_rle(img, layer_two, by, 0, 1) img.flatten() #сводятся все слои bump_layer = img.active_layer #создаётся переменная с текущим активным слоем pdb.plug_in_c_astretch(img, bump_layer)#слой растягивается pdb.plug_in_noisify(img, bump_layer, 0, 0.2, 0.2, 0.2, 0.2) pdb.plug_in_bump_map(img, tdrawable, bump_layer, azimuth, elevation, depth, 0, 0, 0, 0, True, False, 0) gimp.delete(img) register( "python_fu_clothify",#задается название расширения "Make the specified layer look like it is printed on cloth", "Make the specified layer look like it is printed on cloth", "James Henstridge", "James Henstridge", "1997-1999", "<img border="0" />/Filters/Artistic /_Clothify...",#расширение помещается в меню "RGB*, GRAY*", [ #создаётся меню для запроса параметров (PF_INT, "x_blur", "X blur", 9),#запрашиваются параметры (PF_INT, "y_blur", "Y blur", 9), (PF_INT, "azimuth", "Azimuth", 135), (PF_INT, "elevation", "Elevation", 45), (PF_INT, "depth", "Depth", 3) #сначала указывается тип запрашиваемого параметра, затем — переменная, #надпись в меню, значение по умолчанию. ], [], python_clothify) main()