2025, Dec 05 12:01
GEGL‑фильтры в GIMP 3.0: high-pass и «Гауссово размытие» из Python
Разбираем, почему gegl:high-pass и «Гауссово размытие» в GIMP 3.0 «ничего не делают», и показываем правильный способ применить GEGL‑фильтры из Python‑плагина.
GIMP 3.0 застал многих авторов плагинов врасплох. Привычные фильтры исчезли из браузера процедур, а вызов gegl:high-pass будто бы ничего не делал. Те же вопросы возникали и с «Гауссовым размытием». Причина проста: теперь это операции GEGL, и способ их применения из Python‑плагина изменился.
Суть проблемы
В GIMP 3.0 фильтр high-pass больше не доступен по-старому, и попытка запустить gegl:high-pass без правильного GEGL‑подхода не даёт видимого результата. После миграции «Гауссово размытие» оказалось в той же ситуации.
Пример кода с ловушкой
Создание объекта фильтра GEGL без фактического применения его к объекту рисования (drawable) не изменит ни одного пикселя. Если на этом ваш код останавливается, на практике вы получите «ничего не происходит»:
hp_filter = Gimp.DrawableFilter.new(src_item, "gegl:high-pass", "")
hp_opts = hp_filter.get_config()
Ключевой момент: чтобы эффект появился, фильтр нужно присоединить к drawable или слить с ним.
Почему так происходит
В GIMP 3.0 «Гауссово размытие» и high-pass — это фильтры GEGL. Старые записи в браузере процедур, на которые опирались многие скрипты в 2.10, больше не управляют этими эффектами. В Python‑плагине нужно создать объект операции GEGL через Gimp.DrawableFilter, настроить его параметры и явно применить к целевому drawable.
Решение: применяйте фильтры GEGL из Python
«Гауссово размытие» вызывается через Gimp.DrawableFilter, с настройкой параметров. High-pass работает по той же схеме.
Правильное применение «Гауссова размытия» из Python‑плагина:
blur_op = Gimp.DrawableFilter.new(src_item, "gegl:gaussian-blur", "")
blur_cfg = blur_op.get_config()
blur_cfg.set_property("std-dev-x", 5)
blur_cfg.set_property("std-dev-y", 5)
src_item.append_filter(blur_op)
# src_item.merge_filter(blur_op)
Параметры «Гауссова размытия» описаны здесь: https://gegl.org/operations/gegl-gaussian-blur.html
High-pass использует тот же механизм. Если параметры настраивать не нужно, минимальный вариант выглядит так:
hi_pass_op = Gimp.DrawableFilter.new(src_item, "gegl:high-pass", "")
hi_cfg = hi_pass_op.get_config()
src_item.append_filter(hi_pass_op)
# src_item.merge_filter(hi_pass_op)
Примечание о Script‑Fu
Запустить GEGL‑операцию «Гауссово размытие» можно и из Script‑Fu с помощью вызова слияния фильтра. Например:
(gimp-drawable-merge-new-filter layer-main "gegl:gaussian-blur" 0 LAYER-MODE-REPLACE 1.0 "std-dev-x" (* 0.32 bsize) "std-dev-y" 0.0 "filter" "auto")
Почему это важно
Многие плагины, работавшие в 2.10, опираются на процедуры, которые в 3.0 ведут себя иначе. Переход на GEGL в ваших Python‑плагинах необходим для размытия, high-pass и других фильтров. Шаблон «создать → настроить → затем добавить или слить» — это то, что действительно переносит эффект на drawable.
Выводы
Если gegl:high-pass или «Гауссово размытие» будто бы «ничего не делают», применяйте их как фильтры GEGL через Gimp.DrawableFilter и убедитесь, что операция добавлена или слита с drawable. За именами параметров и допустимыми значениями обращайтесь к документации по операциям GEGL. Следуя этому, Python‑плагины для GIMP 3.0 будут работать на уровне прежних версий, используя актуальный и поддерживаемый путь обработки изображений.