Содержание


Использование языка Python для написания GIMP-плагинов

Расширение GIMP для автоматического решения задач

Comments

Эта статья посвящена использованию GIMP-Python, набора Python-модулей, которые позволяют создавать программы на языке Python для автоматизации команд GNU Image Manipulation Program (GIMP). Эти Python-модули представляют собой оболочку вокруг библиотек libgimp. GIMP-Python отличается от расширений Script-Fu. В Script-Fu плагин используется для выполнения сценариев. В GIMP-Python центральное место занимает сценарий Python, который и выполняет всю работу. Экземпляры сценариев GIMP-Python можно создавать внутри самого GIMP или использовать пакетный режим GIMP для запуска этих сценариев из командной строки.

Эта статья посвящена написанию кода Python, позволяющего автоматизировать две разные задачи в GIMP: изменение размера изображений и их сохранение в разных форматах.

GIMP и Python можно установить и использовать на многих платформах, включая Linux®, Mac OS X® и Microsoft® Windows®. Кросс-платформенный характер как GIMP, так и Python означает возможность создавать сложные плагины для GIMP с использованием Python и запускать их на разных платформах.

Обзор GIMP

GIMP ― это программа с открытым исходным кодом для работы с изображениями, которую многие используют в качестве полноценной замены некоторым коммерческим предложениям. GIMP управляет сложными объектами, такими как слои и пути. GIMP поддерживает различные форматы изображения и содержит довольно сложные фильтры. GIMP пользуется мощной поддержкой и участием сообщества, так что найти сведения о том, как использовать или расширить GIMP, как правило, нетрудно.

В разделе Ресурсы приведена ссылка для загрузки и установки GIMP на компьютер.

Обзор языка сценариев Python

Python ― это объектно-ориентированный язык сценариев, который позволяет писать код, работающий на разных платформах. Python портирован на обе виртуальные машины .NET и Java™, так что существует масса различных способов его исполнения. О том, как установить Python на свой компьютер, можно узнать по ссылкам в разделе Ресурсы.

Для Python существует множество модулей, которые обеспечивают нужную функциональность, избавляя от необходимости писать свой собственный код (примером служат модули GIMP-Python).В списке модулей Python встречается множество готовых модулей, пригодных для решения самых разных задач от операций с Hypertext Markup Language (HTML) и соединениями Hypertext Transfer Protocol (HTTP) до работы с файлами Extensible Markup Language (XML) (см. раздел Ресурсы). Можно создавать собственные модули Python, что позволит повторно использовать фрагменты кода в пределах предприятия.

Как и GIMP, Python пользуется значительной поддержкой сообщества. Это означает возможность находить информацию, а также загружать и использовать относительно зрелые инструменты, помогающие в программировании на Python.

Прежде чем перейти к чтению следующей части статьи, установите Python на свою операционную систему в соответствии с инструкциями на сайте Python. Убедитесь, что Python правильно установлен: откройте командную строку и наберите python --version. Результат должен выглядеть примерно как, как в листинге 1.

Листинг 1. Проверка правильности установки Python
$ python --version
Python 2.6.6

Установив интерпретатор Python, можно создваать файлы Python в любом текстовом редакторе и запускать их в интерпретаторе. Также можно использовать плагин PyDev для Eclipse, который обеспечивает подсветку синтаксиса и некоторые другие полезные функции, такие как выявление синтаксических ошибок. Другой вариант ― использование консоли Python непосредственно в Eclipse; это удобно для поиска справочных материалов.

В новых версиях GIMP модули GIMP-Python уже должны быть установлены. Чтобы проверить это, откройте GIMP и посмотрите, присутствует ли в меню Filters пункт Python-Fu. Если да, можно приступать к созданию сценариев. В противном случае установите Python-расширения для GIMP, следуя по ссылкам в разделе Ресурсы.

Если нужен плагин PyDev для Eclipse, выполните следующие действия.

  1. Установите плагин PyDev, выбрав пункт меню Help > Install New Software.
  2. В качестве сайта обновлений используйте http://pydev.org/updates (см. раздел Ресурсы ).
  3. Выполните остальные инструкции по установке и перезагрузите Eclipse.
  4. После перезапуска Eclipse выберите File > New> Project, чтобы создать новый проект.
  5. Выберите пункт PyDev\PyDev Project и нажмите кнопку Next.
  6. Введите имя проекта (например, MyPythonGimpPlugins).
  7. Снимите флажок Use default (использовать параметры по умолчанию) и введите местоположение своего каталога GIMP для модулей Python, как показано на рисунке 1 .
    Рисунок 1. Создание нового проекта с плагином PyDev для Eclipse
    Создание нового проекта с плагином PyDev для Eclipse
    Создание нового проекта с плагином PyDev для Eclipse
  8. Нажмите на ссылку, чтобы настроить интерпретатор. Если Python установлен правильно и по указанному пути, должна работать кнопка Auto Config.

Не забудьте добавить к своему проекту папку с модулями GIMP Python gimp и gimpfu. Добавьте этот каталог в свой проект Eclipse (но не добавляйте его к основному пути) с помощью пункта меню Project> Properties, как показано на рисунке 2.

Рисунок 2. Добавление каталога модулей GIMP-Python к проекту в Eclipse
Добавление каталога модулей GIMP-Python к проекту в Eclipse
Добавление каталога модулей GIMP-Python к проекту в Eclipse

Нажмите кнопку PyDev - PYTHONPATH. Затем выберите вкладку External Libraries (внешние библиотеки) и нажмите кнопку Add source folder (Добавить папку-источник), чтобы добавить папку, в которой устанавливаются модули GIMP Python. Путь будет примерно таким: /usr/lib/gimp/2.0/python/.

В Eclipse можно запустить консоль Python. Когда видна консоль, выберите из списка консолей Pydev Console.

Регистрация сценария

Файлы Python попадают в папку пользователя GIMP. В Mac- и Linux-системах это папка ~/.gimp-2.6/plug-ins. Файлы сценариев Python должны быть исполняемыми и содержать интерпретатор Python в первой строке, как стандартные декларации сценариев (см. листинг 2).

Листинг 2. Элементарный сценарий Python, который выводит "Hello, world!"
#!/usr/bin/python

print "Hello, world!"

Сценарий Python для GIMP нужно зарегистрировать, чтобы поместить плагин в одно из меню GIMP. В листинге 3 приведен минимальный код, необходимый для регистрации сценария в GIMP и вывода "Hello, World!" на консоль при его вызове.

Листинг 3. Регистрация плагина в GIMP
#!/usr/bin/python

from gimpfu import *

def plugin_main(timg, tdrawable):
    print "Hello, world!"

register(
        "python_fu_resize",
        "Saves the image at a maximum width and height",
        "Saves the image at a maximum width and height",
        "Nathan A. Good",
        "Nathan A. Good",
        "2010",
        "<Image>/Image/Resize to max...",
        "RGB*, GRAY*",
        [],
        [],
        plugin_main)

main()

Метод register() передает GIMP информацию о вашем плагине.

Метод register() имеет несколько параметров, которые говорят GIMP, как отображать меню для плагина и какой метод Python вызвать при запуске плагина из меню. В таблице 1 приведены параметры метода register().

Таблица 1. Параметры и примеры метода register()
ПараметрПримерОписание
proc_namepython_fu_resizeИмя команды, которую можно вызывать из командной строки или сценария
blurbСохраняет изображение с максимальной шириной и высотойИнформация о плагине, который отображается в браузере процедур
helpСохраняет изображение с максимальной шириной и высотойСправка по плагину
authorNathan A. GoodАвтор плагина
copyrightNathan A. GoodОбладатель авторских прав на плагин (обычно тот же, что и автор)
date2010Дата авторского права
label<Image>/Image/Resize to max...Метка, используемая для плагина в меню
imagetypesRGB*, GRAY*Типы изображений, с которыми работает плагин
params[]Параметры метода плагина
results[]Результаты метода плагина
functionplugin_mainИмя метода, вызываемого в программе Python

Чтобы получить самую актуальную информацию о параметрах метода register, откройте консоль Python-Fu (нажмите Filters > Python-Fu > Console) и введите команды, показанные в листинге 4.

Листинг 4. Получение справки с использованием консоли Python
import gimpfu 
help(gimfu.register)

После ввода значений в метод register сохраните свой сценарий. Убедитесь, что он исполняемый и находится в папке .gimp2-6/plug-ins.

Сохранив сценарий, запустите GIMP из командной строки с помощью команды gimp. Это позволит вам увидеть любую информацию, выведенную вашим плагином, в том числе выходное сообщение. Кроме того, если в плагине есть ошибки, вы их увидите.

Запустив GIMP, перейдите в меню Image, где появится новый пункт меню Resize to max, как показано на рисунке 3.

Рисунок 3. Новый пункт меню нового плагина
Скриншот, показывающий, что 'Resize to max..' появляется в нижней части меню Image в GIMP

Теперь, когда ваш плагин правильно зарегистрирован в GIMP, и можно выбрать пункт меню своего плагина, вы готовы приступить к добавлению кода Python для изменения размера изображения.

Сценарий изменения размера

Имея плагин Python в GIMP, можно добавить реальный код в метод plugin_main внутри кода плагина.

В листинге 5 показан код для изменения размеров изображения.

Листинг 5. Добавление кода в метод plugin_main
def plugin_main(timg, tdrawable, maxh=500, maxw=500):

 currentWidth = tdrawable.width
 currentHeight = tdrawable.height

 newWidth = currentWidth
 newHeight = currentHeight

 if (maxw < newWidth):
 newWidth = maxw
 newHeight = (float(currentHeight) / (float(currentWidth) / newWidth))

 if (maxh < newHeight):
 newHeight = maxh
 newWidth = (float(currentWidth) / (float(currentHeight) / newHeight))

 pdb.gimp_image_scale(timg, newWidth, newHeight)

Чтобы изменить размер изображения, код Python просто вызывает метод pdb.gimp_scale_image, выполнив некоторые элементарные вычисления, чтобы определить требуемые значения размеров масштабируемого изображения. Поскольку значения, введенные в поле, это максимальные значения, сценарий должен проверить как ширину, так и высоту текущего изображения, чтобы определить, нужно ли ограничить его размеры. Если какой-либо размер изображения больше максимального, плагин ограничивает его до максимального размера, а затем вычисляет другое измерение.

О других методах, которые можно вызывать в сценарии Python, см. в Справке GIMP Help > Procedure Browser. На рисунке 4 показан браузер процедур метода pdb.gimp_image_scale.

Рисунок 4. Просмотр метода gimp-image-scale в браузере процедур
Просмотр метода gimp-image-scale в браузере процедур
Просмотр метода gimp-image-scale в браузере процедур

Запуск сценария плагина изменения размера

Добавив код изменения размера, откройте изображение в GIMP. Выберите свой новый пункт меню Image > Resize to max. Сценарий спросит у вас размеры, как показано на рисунке 5.

Рисунок 5. Входные параметры плагина
Входные параметры плагина
Входные параметры плагина

При нажатии кнопки ОК выполняется метод plugin_main, и ваш сценарий изменяет размеры изображения.

Сценарий преобразования изображений

Теперь, когда у вас есть плагин для изменения размеров изображения, сценарий Python можно изменить так, чтобы он сохранял изображение в другом формате. Это позволит сохранить исходное изображение в виде файла JPEG и изменить его размер в соответствии с определенными ограничениями.

Дополнения к сценарию показаны в листинге 6.

Листинг 6. Добавление кода для сохранения JPEG-копии исходного изображения
#!/usr/bin/python

from gimpfu import *

def plugin_main(timg, tdrawable, maxh=500, maxw=500, savecopy=TRUE):

    currentWidth = tdrawable.width
    currentHeight = tdrawable.height

    newWidth = currentWidth
    newHeight = currentHeight

    if (maxw > newWidth):
        newWidth = maxw
        newHeight = (float(currentHeight) / (float(currentWidth) / newWidth))

    if (maxh > newHeight):
        newHeight = maxh
        newWidth = (float(currentWidth) / (float(currentHeight) / newHeight))

    pdb.gimp_image_scale(timg, newWidth, newHeight)
 
    if savecopy:
        pdb.file_jpeg_save(timg, tdrawable, timg.name+".jpg", timg.name+".jpg", 
                           0.9, 0, 0, 0, "", 0, 0, 0, 0)

register(
        "python_fu_resize",
        "Saves the image at a maximum width and height",
        "Saves the image at a maximum width and height",
        "Nathan A. Good",
        "Nathan A. Good",
        "2010",
        "<Image>/Image/Resize to max...",
        "RGB*, GRAY*",
        [
                (PF_INT, "max_width", "Maximum Width", 500),
                (PF_INT, "max_height", "Maximum Height", 500),
                (PF_BOOL, "copy", "Make a JPEG copy", TRUE),
        ],
        [],
        plugin_main)

main()

Имя нужного метода можно получить из базы данных процедур (переменная PDB) с помощью пункта меню Help > Procedure Browser, как показано на рисунке 6.

Рисунок 6. Поиск метода для сохранения файлов JPEG в браузере процедур
Поиск метода для сохранения файлов JPEG в браузере процедур
Поиск метода для сохранения файлов JPEG в браузере процедур

Константы, используемые для типов входных параметров, берутся из библиотеки gimpfu. Список доступных констант можно получить, введя команды, показанные в листинге 7, с консоли Python в GIMP или Eclipse.

Листинг 7. Получение справки по константам gimpfu
import gimpfu help(gimpfu)

Константы начинаются с PF_ и определяют типы, которые можно использовать для элементов управления формы ввода.

Запуск отредактированного сценария плагина

После того как в сценарий Python добавлен новый код для сохранения изображений в формате JPEG, можно запустить плагин, открыв изображение в GIMP и воспользовавшись пунктом меню Image > Resize to max. Вы увидите обновленное окно ввода параметров, как показано на рисунке 7.

Рисунок 7. Обновленное окно ввода параметров
Обновленное окно ввода параметров 'Make a JPEG copy'
Обновленное окно ввода параметров 'Make a JPEG copy'

Теперь, когда сценарий готов и опробован на отдельных изображениях, можно запустить плагин для всех изображений в папке.

Запуск обеих операций для всей папки

У GIMP есть неинтерактивный пакетный режим, который позволяет вызывать команды GIMP из командной строки. Функцию командной строки можно применить для работы со всеми изображениями в папке, используя стандартные шаблоны.

Например, метод сохранения изображения в формате JPEG можно передать непосредственно в пакетный режим GIMP, используя команду, приведенную в листинге 8.

Листинг 8. Использование неинтерактивного пакетного режима GIMP для сохранения изображений
gimp -i -b '(file-jpeg-save "Menu_006.png" 200 200 TRUE)' -b '(gimp-quit 0)'

Тем не менее, если учесть расчеты, необходимые для ограничения по размеру, это становится затруднительным. Так что плагин значительно упрощает обе операции, и его можно вызывать единственной командой GIMP.

Теперь, когда плагин работает и зарегистрирован в GIMP, у него есть собственная команда в базе данных процедур GIMP. Ее можно найти в браузере процедур (Help > Procedure Browser в GIMP) и ввести имя, присвоенное плагину. Например, если в методе register вы назвали его python_fu_resize, как показано в листинге 6, то и в браузере процедур GIMP он будет фигурировать под именем python-fu-resize. Вызовите эту команду, как она представлена в браузере процедур GIMP, из командной строки с помощью команды gimp и флагов -i -b, как показано в листинге 9.

Листинг 9. Вызов плагина в неинтерактивном пакетном режиме GIMP
gimp -i -b '(python-fu-resize "myimage.png" 200 200 TRUE)' -b '(gimp-quit 0)'

GIMP открывает указанное изображение, выполняет команды с заданными параметрами и завершает свою работу, не внося никаких изменений в исходное изображение. С помощью команды GIMP, выполняемой в неинтерактивном пакетном режиме, можно создать сценарий крупномасштабных изменений в целой папке с изображениями.

Команда, показанная в листинге 10, применяет новый плагин ко всем изображениям Portable Network Graphics (PNG), содержащимся в папке.

Листинг 10. Вызов плагина в GIMP для всех изображений в папке
gimp -i -b '(python-fu-resize "*.png" 200 200 TRUE)' -b '(gimp-quit 0)'

Заключение

Python ― это объектно-ориентированный язык сценариев, который позволяет писать сценарии, исполняемые на разных платформах. У языка сценариев Python обширная инструментальная поддержка ― от простой подсветки синтаксиса в текстовых редакторах до плагинов Eclipse.

GIMP ― это приложение, которое обеспечивает широкие возможности по редактированию графических файлов на разных платформах. GIMP поддерживает плагины, которые можно использовать для автоматизации самых сложных задач с помощью сценариев. Так как GIMP поддерживает в плагинах сценарии Python, этот язык можно использовать для расширения GIMP. В неинтерактивном пакетном режиме плагины можно вызывать из командной строки методом, подходящим для создания сценариев.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=758017
ArticleTitle=Использование языка Python для написания GIMP-плагинов
publish-date=09162011