|
GIMP и Perl
О чем собственно речь? Разумеется не секрет, что в GIMP есть встроенный интерпретатор языка Scheme (диалект LISP), есть libgimp для доступа к API редактора. Добрая половина эффектов и фильтров в GIMP - самые настоящие plug-in'ы. Но изучать LISP не хочется, libgimp и C API - совсем грустно. А надо-то что-то совсем простое, например добавить в менюшку новую команду или скриптом обработать каталог с фотками. Как поступить? В GIMP есть возможность делать это все на Perl и об этом - сегодняшний рассказ. Несмотря на то, что GIMP 2 существует достаточно давно, мой рассказ про GIMP 1.2. NB! Рассказ про GIMP 2 можно почитать здесь.
Сборка и настройка Сперва нужно установить необходимые Perl модули. Нам понадобятся:
Для последнего нужны библиотеки GTK и GNOME (проверьте наличие файла gtk-xmhtml.h в include/). Для сборки модулей распаковываем скачанные архивы и далее (пример для XML::Writer): [/tmp/XML-Writer-0.603]# perl ./Makefile.PL [/tmp/XML-Writer-0.603]# make [/tmp/XML-Writer-0.603]# make install
Cи-шная часть. [/tmp]# tar zxvf gimp-print-4.2.7.tar.gz [/tmp]# cd gimp-print-4.2.7 [/tmp/gimp-print-4.2.7]# ./configure [/tmp/gimp-print-4.2.7]# make [/tmp/gimp-print-4.2.7]# make install Качаем GIMP отсюда, собираем (мне нравится установка в отдельный каталог /usr/local/gimp): [/tmp]# bzip2 -dc gimp-1.2.5.tar.bz2 | tar zxvf - [/tmp]# cd gimp-1.2.5 [/tmp/gimp-1.2.5]# ./configure --disable-nls --prefix=/usr/local/gimp [/tmp/gimp-1.2.5]# make [/tmp/gimp-1.2.5]# make install Если gimp-print не установлен, при запуске configure добавляем ключик --disable-print Запускаем GIMP от обычного пользователя (не root) > /usr/local/gimp/bin/gimp Теперь в меню Xtns видим:
Все готово для скриптописания. Скрипты Их удобно использовать для автоматизации чего-либо, ну например есть каталог с кучей PNG и нужно нам:
Скелет такого скрипта выглядит примерно так:
use strict;
use Cwd;
use Gimp qw(:auto);
Gimp::on_net {
...
тут выполняются наши операции над файлами
...
};
exit main();
Заполняем Gimp::on_net{}:
Gimp::on_net {
my $dir = cwd;
while ($_=shift(@ARGV)) { # разбираем все файлы из ком. строки
chomp; s|\./||;
my $raw = $_ ;
my $file = $dir . '/' . $_ ;
print "Processing $file\n";
my $img = gimp_file_load ($file, $raw); # грузим картинку в GIMP
$img->undo_disable; # undo не нужно
my $h = $img->height; # определяем размеры
my $w = $img->width;
my $scale = 0.33; # теперь уменьшаем в 3 раза
$img->scale (int($scale * $w),int($scale * $h));
my $alayer=$img->get_active_layer(); # layer, с которым будем работать
$img->c_astretch($alayer); # выравниваем контраст
$alayer->sharpen (30); # 30% usharp mask
$alayer->file_png_save( "$file", "$raw", 0, 9, 0, 0, 0, 0, 0); # записываем результаты
$img->delete; # освобождаем память
}
};
Все полностью. 1150186019: server version 1.211 started 1150186019: accepting connections on /tmp/gimp-perl-serv-uid-500/gimp-perl-serv Теперь можно запускать perl'овку: > perl ./script1.plx fotka1.png fotka2.png Все файлы будут последовательно обработаны. Если нужно обработать много файлов, то GIMP и скрипты можно запустить в отдельном Xnest, тогда progress-bars и прочая ерунда не будет замусоривать экран. Plug'in'ы
Эта категория, как я уже говорил запускается внутри GIMP.
use strict;
use Gimp ":auto";
use Gimp::Fu;
sub crop_save_close {
...
тут собственно вся логика
...
}
register
"crop_save_close", # имя Plig-in'а
"Crop save close", # короткое описание
"No help yet", # help
"Alexey Semenoff", # автор, (c) и дата
"Alexey Semenoff (c) 2006",
"2006-09-07",
"<Image>/Crop-Save", # позиция в менюшнице
"*", # какие типы картинок, у нас - все
[
],
\&crop_save_close; # регистрируем наше творение
exit main();
Этот же скрипт полностью. > cp crop-save-close ~/.gimp-1.2/plug-ins/ > chmod 755 ~/.gimp-1.2/plug-ins/crop-save-closeЗапускаем GIMP, открываем какой-нибудь файл. Выделяем кусок, который хотим сохранить. Правой кнопкой мыши выбираем Crop-Save из меню:
Все работает и именно как и задумывалось!
Двигаться дальше Для полноценной работы под рукой есть неплохая дока по API. В GIMP открываем Xtns->PDB Explorer. Например для получения справки для работы с файлами набираем gimp_file и жмем <Enter>, затем выбираем интересующее, например 'gimp_file_load' :
Наши plug-in'ы тоже экспортируют функции (с префиксом 'perl_fu_') и их тоже можно просмотреть из PDB Explorer'a:
В заключение ссылки по теме:
|
| Copyright (c) 1999-2008 Alexey Semenoff |