linuxgraphics.ru
Навигация
Главная
Статьи
FAQ
Форум
База знаний
Ссылки
Архив новостей
Обратная связь
Поиск
Гость
Имя

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Сейчас на сайте
Гостей: 4
Пользователи: Leonid

Всего пользователей: 497
Новый пользователь: Stiff
Последние статьи
LProf и реальное упр...
Экспериментальное сж...
Как нарисовать пальм...
Как нарисовать дерев...
Обзор GIMP 2.4
Введение в написание расширений для 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'.

Теперь приступим.
  1. Запустите GIMP.
  2. В меню /Расш./Python-Fu запустите Console.
  3. Для загрузки файла и открытия окна GIMP выберите в окне консоли Browse.
  4. Этот браузер позволяет просмотреть все процедуры GIMP. Найдите процедуру загрузки файлов 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


Опубликовал Michael 02/06/2006 18:48:071 Комментариев · 1635 Прочтений - Для печати
Комментарии
professor 02/06/2006 22:56:06
Вещь хорошая, но вот выражение
from gimpfu import *
гм... ну не правильное оно smiley Работать то будет, но лучше все импортить поименно, а не гамузом.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Copyright © 2007

Hosted by uCoz