Эта статья посвящена использованию 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 на компьютер.
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, выполните следующие действия.
- Установите плагин PyDev, выбрав пункт меню Help > Install New Software.
- В качестве сайта обновлений используйте http://pydev.org/updates (см. раздел Ресурсы ).
- Выполните остальные инструкции по установке и перезагрузите Eclipse.
- После перезапуска Eclipse выберите File > New> Project, чтобы создать новый проект.
- Выберите пункт PyDev\PyDev Project и нажмите кнопку Next.
- Введите имя проекта (например, MyPythonGimpPlugins).
- Снимите флажок Use default (использовать параметры по умолчанию) и введите местоположение своего каталога GIMP для модулей Python, как показано на рисунке 1 .
Рисунок 1. Создание нового проекта с плагином PyDev для Eclipse
- Нажмите на ссылку, чтобы настроить интерпретатор. Если Python установлен правильно и по указанному пути, должна работать кнопка Auto Config.
Не забудьте добавить к своему проекту папку с модулями GIMP Python gimp и gimpfu. Добавьте этот каталог в свой проект Eclipse (но не добавляйте его к основному пути) с помощью пункта меню Project> Properties, как показано на рисунке 2.
Рисунок 2. Добавление каталога модулей 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_name | python_fu_resize | Имя команды, которую можно вызывать из командной строки или сценария |
| blurb | Сохраняет изображение с максимальной шириной и высотой | Информация о плагине, который отображается в браузере процедур |
| help | Сохраняет изображение с максимальной шириной и высотой | Справка по плагину |
| author | Nathan A. Good | Автор плагина |
| copyright | Nathan A. Good | Обладатель авторских прав на плагин (обычно тот же, что и автор) |
| date | 2010 | Дата авторского права |
| label | <Image>/Image/Resize to max... | Метка, используемая для плагина в меню |
| imagetypes | RGB*, GRAY* | Типы изображений, с которыми работает плагин |
| params | [] | Параметры метода плагина |
| results | [] | Результаты метода плагина |
| function | plugin_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. Новый пункт меню нового плагина
Теперь, когда ваш плагин правильно зарегистрирован в GIMP, и можно выбрать пункт меню своего плагина, вы готовы приступить к добавлению кода Python для изменения размера изображения.
Имея плагин Python в GIMP, можно добавить реальный код в метод plugin_main внутри кода плагина.
В листинге 5 показан код для изменения размеров изображения.
Листинг 5. Добавление кода в метод
plugin_maindef 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 > 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 в браузере процедур
Константы, используемые для типов входных параметров, берутся из библиотеки gimpfu. Список доступных констант можно получить, введя команды, показанные в листинге 7, с консоли Python в GIMP или Eclipse.
Листинг 7. Получение справки по константам
gimpfuimport gimpfu help(gimpfu) |
Константы начинаются с PF_ и определяют типы, которые можно использовать для элементов управления формы ввода.
Запуск отредактированного сценария плагина
После того как в сценарий Python добавлен новый код для сохранения изображений в формате JPEG, можно запустить плагин, открыв изображение в GIMP и воспользовавшись пунктом меню Image > Resize to max. Вы увидите обновленное окно ввода параметров, как показано на рисунке 7.
Рисунок 7. Обновленное окно ввода параметров
Теперь, когда сценарий готов и опробован на отдельных изображениях, можно запустить плагин для всех изображений в папке.
Запуск обеих операций для всей папки
У 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. В неинтерактивном пакетном режиме плагины можно вызывать из командной строки методом, подходящим для создания сценариев.
Научиться
Получить продукты и технологии
- Интерпретатор Python, который позволяет запускать сценарии Python на имеющемся компьютере.
- Основы разработки кода Python в IDE: Eclipse IDE.
- Плагин PyDev для Eclipse, позволяющий программировать на Python в Eclipse IDE.
- GIMP, программа с открытым исходным кодом для работы с изображениями.
Натан Гуд (Nathan A. Good) живет в регионе Twin Cities (штат Миннесота, США). Н. Гуд профессионально занимается разработкой программного обеспечения, архитектурой программного обеспечения и системным администрированием. Когда Н. Гуд не занят написанием программного обеспечения, он с удовольствием занимается построением ПК и серверов, изучением и освоением новых технологий, а также убеждением своих коллег в необходимости перехода на программное обеспечение с открытым кодом. Натан Гуд лично и в соавторстве написал множество книг и статей, в том числе: Professional Red Hat Enterprise Linux 3, Regular Expression Recipes: A Problem-Solution Approach, Regular Expression Recipes for Windows Developers: A Problem-Solution Approach, PHP 5 Recipes: A Problem-Solution Approach. Самая новейшая из его работ: Foundations of PEAR: Rapid PHP Development.