Введение в написание расширений для GIMP на Python

Почти все пользователи Linux для редактирования фотографий используют GIMP. Рано или поздно возникает вопрос о том, как автоматизировать выполнение тех или иных действий.

Конечно, можно написать сценарий на Script-Fu (вариант Scheme для GIMP), но лучше воспользоваться Python, поскольку писать на нём гораздо проще. В этой статье рассматриваются основы написания сценариев на Python.

Что следует знать перед началом работы.

Во-первых, должен быть установлен Python, а также расширение gimp-python, которое позволяет использовать Python для написания расширений.

Во-вторых, расширения, сохранённые в каталог /home/пользователь/.gimp-2.6/plug-ins, будут доступны только одному пользователю, сохранённые в /usr/lib/gimp/2.0/plug-ins — всем.

В-третьих, самостоятельно добавленные расширения должны быть исполняемыми. Есть несколько способов сделать это — от изменения атрибутов через диалог свойств файла в Nautilus или Konqueror до команды ‘chmod +x имя_сценарий.py’.

Теперь приступим.

  1. Запустите GIMP.
  2. В меню «Фильтры > Python-Fu» выберите пункт Консоль.
  3. Для загрузки файла и открытия окна GIMP нажмите в открывшемся окне консоли кнопкуПросмотреть.
  4. В появившемся диалоге вы можете просмотреть все процедуры GIMP, достпные для использования в сценариях на Python. Найдите процедуру загрузки файлов JPEG, которая называется file-jpeg-load. Справа в браузере описан тип данных, которые передаются этой процедуре и которые выдаёт она. Чуть ниже приведена краткая справка.
  5. Нажмите кнопку «Применить».
  6. Измените полученное на «image = pdb.file_jpeg_load(/home/пользователь/image1.jpg, 1)». ‘pdb’ указывает, что используется процедура из базы данных процедур GIMP (Procedure DataBase). Все эти процедуры можно добавлять прямо из браузера, а затем по обстоятельствам редактировать.
  7. Теперь переменная image хранит изображение.
  8. Посмотреть изображение можно так: «gimp.Display(image)».
  9. Для определения рабочей области воспользуйтесь «drawable = pdb.gimp_image_get_active_drawable(image)».
  10. Так можно определить высоту и ширину рабочей области: «height,width=drawable.height, drawable.width».
  11. Так эти параметры можно посмотреть: «height, width».
  12. Так можно инвертировать цвета: «pdb.gimp_invert(drawable)».
  13. Добавьте новый слой прозрачностью в 50%: «layer = pdb.gimp_layer_new(image, width, height, 0, «new_layer», 50, 0)».
  14. Сделайте его видимым в диалоге слоёв: «image.add_layer(layer, 0)».
  15. Залейте его цветом, установленным как цвет переднего плана: «pdb.gimp_edit_fill(layer, 1)».
  16. Объедините все видимые слои: «layer = pdb.gimp_image_merge_visible_layers(image, 0)».

По аналогии можно произвести ещё с десяток действий над рисунком, и тогда необходимо будет все их сохранить в файлик с расширением .py, который можно повторно использовать.

Расширению можно передавать параметры. Рассмотрим это на примере сценария clothify.py из поставки gimp-python. Пояснения добавлены по ходу текста программы.


#!/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()

На этом всё. Подробнее о создании сценариев на Python для GIMP можно узнать издокументации на английском языке.

АвторMichael

Add a comment