Почти все пользователи 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’.
Теперь приступим.
- Запустите 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)».
По аналогии можно произвести ещё с десяток действий над рисунком, и тогда необходимо будет все их сохранить в файлик с расширением .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
Оставить комментарий