Последние несколько месяцев команда GIMP разрабатывала множество новых функций для будущего релиза GIMP 3.4. Недавно стало заметно, что список изменений заметно разросся — хорошая проблема для проекта. Хотя внутренняя работа кипела, публичного отчёта о прогрессе не было довольно давно. Поэтому команда решила поделиться подробностями о некоторых новых функциях и улучшениях UX, которые появятся в первом релизе для разработчиков — GIMP 3.3.2. Список не исчерпывающий (часть новостей приберегли для самого релиза), но он должен дать представление о текущем направлении и прогрессе разработки GIMP.

Новый формат файла проекта

В последнее время главным фокусом мейнтейнера Jehan стала разработка нового формата файла проекта для GIMP.

XCF служит основным форматом проектов GIMP с 1997 года и хорошо зарекомендовал себя. Однако со временем ограничения бинарного формата XCF становились всё заметнее. Среди прочего, он плохо подходит для очень крупных или сложных проектов — например, для многостраничных документов и анимации, которые сейчас планируются для GIMP 3.6.

Новый формат файла проекта будет построен по более распространённой схеме «zip-архив с XML». Технические детали пока разрабатываются и реализуются, но это изменение позволит ускорить сохранение — потребуется обновлять только изменившиеся части файла, а не весь файл целиком при каждом сохранении. Это также открывает дорогу к давно желанным функциям вроде автосохранения, которое теперь станет гораздо более реализуемым.

При этом XCF никуда не денется! Обратная совместимость важна для проекта, и загрузка XCF будет поддерживаться во всех будущих версиях GIMP. (Например, в команде гордятся тем, что файл XCF, созданный небольшой компанией для своего логотипа в 1998 году, до сих пор отображается одинаково в последней версии GIMP.)

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

MyPaint-кисти: спектральное смешивание

Во время разработки GIMP 3.2 команда перешла на более новую версию движка кистей MyPaint. Это принесло новые кисти и способы взаимодействия с холстом в инструменте MyPaint Brush, но одна функция тогда осталась за бортом — спектральное смешивание (Spectral Blending).

Спектральное смешивание имитирует эффект смешивания физических пигментов в цифровом рисунке. Например, смешивание жёлтого и синего даёт зелёный цвет вместо более тёмного жёлтого, а смешивание красного и жёлтого создаёт оранжевый оттенок.

Новая участница проекта Cassidie Grogan взялась за эту задачу и реализовала функцию. Теперь в настройках инструмента MyPaint Brush есть флажок Spectral Blending. Если он включён, используется новый метод смешивания. Силу смешивания можно регулировать ползунком Pigment.

Демонстрация спектрального смешивания MyPaint

Кроме того, мейнтейнер Michael Natterer улучшил код предпросмотра MyPaint-кистей, теперь они отображаются в полном размере вместо 48×48 пикселей. Это устраняет проблему, из-за которой превью выглядели размытыми на больших экранах.

Неразрушающее редактирование

Alx Sa продолжает вносить изменения в код неразрушающих фильтров. Вот некоторые из них:

Теперь фильтры можно применять неразрушающим способом к маскам слоёв! Заодно всплывающее окно фильтров было переработано силами Reju — теперь оно показывает активные фильтры и для слоя, и для его маски, что позволяет работать с обоими на одном экране.

Инструмент «Градиент» теперь тоже можно использовать неразрушающим способом! Если включить опцию Editable Gradient в параметрах инструмента, созданный градиент добавится в стек фильтров как любой другой эффект. Его видимость можно переключать, менять порядок в стеке фильтров и удалять. Также можно редактировать сам градиент — это переключит обратно на инструмент «Градиент» для внесения дальнейших изменений.

Интерфейс с активным фильтром градиента на слое и активным фильтром на маске слоя
Интерфейс с активным фильтром градиента на слое и активным фильтром на маске слоя

Фильтры без диалоговых окон (например, «Инвертировать») теперь можно применять неразрушающим способом к нерастровым слоям — таким как группы слоёв, слои-ссылки, текстовые и векторные слои.

Улучшения поддержки PSD

Обычно все обновления по форматам файлов собирают в один общий раздел, но работы над поддержкой PSD оказалось так много (и выполнило её так много людей), что решено было выделить эту тему отдельно.

Во-первых, новый участник проекта Frank Teklote занимался улучшением совместимости с PSD. Его главным проектом для этого релиза стало создание процедуры экспорта метаданных PSD для TIFF и JPEG. Это дополняет уже существующую процедуру импорта метаданных PSD: теперь если импортировать JPEG с путями или TIFF со слоями (или создать такие в GIMP), эта информация сохранится и в экспортированном изображении.

Ещё один плюс работы Frank в том, что по мере дальнейшего улучшения совместимости с PSD функции экспорта в TIFF и JPEG будут автоматически получать эти же улучшения.

В связке с этим Jacob Boerema реализовал поддержку импорта PSD Descriptor. Большая часть текущей поддержки PSD основана на публичной спецификации Adobe. Однако этот документ последний раз обновлялся в 2019 году, а современные PSD-файлы используют для хранения многих функций относительно недокументированный текстовый формат под названием Descriptors.

Теперь, когда GIMP умеет читать дескрипторы, началась масштабная работа по улучшению поддержки импорта PSD. Из отдельных обновлений: текстовые слои теперь редактируемые, ряд корректирующих слоёв и современных стилей слоёв отображаются в виде их эквивалентов на GEGL, а фигуры сплошного цвета импортируются как векторные слои. Это активная область разработки, в которой участвуют, в частности, два стажёра GSoC — Akascape и Waris Maqbool. В команде надеются, что эта работа облегчит пользователям GIMP взаимодействие с существующими PSD-проектами.

Редактируемые текстовые слои PSD в GIMP
Редактируемые текстовые слои PSD в GIMP

Нативные диалоги выбора файлов

GIMP всегда использовал диалог выбора файлов, предоставляемый библиотекой GTK GUI, для поиска, загрузки и сохранения файлов. Хотя этот диалог справляется со своей задачей, он нередко работает иначе, чем «нативный» диалог выбора файлов на не-GNOME платформах — Windows, macOS и KDE. Кроме того, в GTK3 менялся интерфейс этого диалога, что вызвало немало эмоциональных отзывов в багтрекере проекта.

Поэтому Alx Sa начал переносить диалоги выбора файлов GIMP на «нативный» вариант, предоставляемый GTK3. Это значит, что при открытии или сохранении файла будет отображаться стандартный диалог выбора файлов вашей платформы вместо диалога GTK (если только платформа уже не использует именно его — тогда ничего не изменится).

Пример нативного диалога выбора файлов на macOS, автор Bruno Lopes
Пример нативного диалога выбора файлов на macOS, автор Bruno Lopes

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

Обновления пользовательского опыта и интерфейса

Многие новые и постоянные участники проекта прислали улучшения интерфейса и пользовательского опыта GIMP. Команда хочет отметить их вклад и призывает всех продолжать делиться отзывами в трекере задач по дизайну.

Дизайнер Denis Rangelov проделал большую работу по обновлению иконок интерфейса GIMP. Он пересоздал иконки блокировки слоёв для более согласованного вида.

Он же взялся за масштабную задачу — перевести все 78 иконок курсоров в формат SVG, что позволит масштабировать их для дисплеев с высоким разрешением без потери качества!

Исходный растровый курсор Векторный курсор Denis
Растровая иконка аэрографа Векторная иконка аэрографа
Пример исходного и векторного курсоров

Поступали сообщения о проблемах с производительностью при рисовании или масштабировании холста, если вид холста был повёрнут. Новый участник проекта woot000 диагностировал проблему и подготовил исправление. Теперь узор прозрачности «шахматная доска» больше не поворачивается вместе с холстом, что заметно повышает производительность при рисовании и редактировании. Также была исправлена связанная проблема, из-за которой узор шахматной доски исчезал при масштабировании холста сверх определённого уровня.

Gabriele Barbero реализовал переработанный интерфейс поиска действий, дизайн которого подготовил Denis Rangelov. Новая раскладка делает связанную комбинацию клавиш более заметной и лучше согласуется с раскладкой меню.

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

Новый участник проекта Andreas Vukman улучшил отображение дока с текстурами. Теперь мелкие текстуры замощают всё доступное пространство, создавая единообразный предпросмотр для всех текстур — вместо того, чтобы некоторые из них отображались с неровными отступами. По мнению команды, это заметно улучшило внешний вид дока.

Richard Gitschlag обновил текстовый редактор на холсте, добавив возможность выделения текста через Shift+клик. Теперь это должно работать похоже на текстовые редакторы вроде LibreOffice.

В предыдущих версиях GIMP импорт и экспорт метаданных в редакторе метаданных выполнялся через выбор опции в выпадающем списке. Ahmed E. Yassin сделал этот процесс более интуитивным (и более согласованным с остальным интерфейсом GIMP), заменив выпадающий список на две отдельные кнопки.

Ondřej Míchal пересмотрел несколько разделов интерфейса GIMP и заменил многие виджеты Spin Entry на Spin Scale. Виджет Spin Entry неудобен в использовании при уменьшении ширины, так что это изменение улучшает удобство работы во многих местах интерфейса.

Разные изменения и исправления

Четверо стажёров GSoC продолжают работу с момента промежуточного отчёта. Недавно фильтр «Резкость» от Waris Maqbool был объединён в GEGL, так что он появится в следующем релизе GEGL.

Новый участник проекта Dimitriy Ryazantcev прислал несколько патчей для улучшения поддержки Windows ICO/CUR/ANI. Уже исправлен рендеринг для некоторых 32-битных форматов ICO, а алгоритмы загрузки и предпросмотра приведены в большее соответствие со спецификацией Windows.

Estecka исправил проблему рендеринга при применении неразрушающих фильтров к сквозным (passthrough) группам слоёв, из-за которой изображение выглядело по-разному в зависимости от того, были ли у группы дочерние слои.

Новый участник проекта Petr Vorel исправил баг, из-за которого нажатие Alt+0 не открывало десятое по счёту изображение из истории.

Lloyd Konneker, главный контрибьютор Script-fu, исправил регрессию в сторонних скриптах, из-за которой диапазон значений для некоторых параметров не отображался в интерфейсе.

Jacob Boerema и Alx Sa отреагировали на ряд отчётов о безопасности и выпустили патчи для потенциальных уязвимостей в некоторых плагинах для работы с изображениями.

Что дальше

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

Официального релиза для разработчиков 3.3.2 пока нет, поскольку несколько пунктов дорожной карты ещё в работе. Тем, кто не хочет ждать, доступны «ночные» сборки — инструкции можно найти в разделе Automatic Development Builds.

Тем временем в ближайшие недели планируется выпустить GIMP 3.2.6. Это стабильный релиз, поэтому большинство описанных здесь новых функций в него не войдут. Однако он принесёт ряд важных исправлений ошибок и небольших улучшений — подробнее об этом расскажут в отдельной новости о релизе 3.2.6.