Skip to content

exporting data from krita (ru)

nklbdev edited this page Jul 21, 2023 · 11 revisions

Заметки об экспорте данных из Krita

en ru

Krita - это мощное приложение для рисования растровой графики и анимации, ретуши и различных преобразований изображений. Так же у него есть некоторые функции векторной графики. Оно построено на базе фреймворка Qt и является частью KDE. Оно поддерживает установку различных плагинов и ресурсов, таких как кисти и эффекты. У него есть API для сценариев на Python и небольшой CLI (интерфейс командной строки) для экспорта или преобразования файлов.

Для работы с анимацией в Krita есть докеры (паркующиеся окна):

  • Animation Timeline, на котором расположена таблица слоёв и ключевых кадров и органы управления воспроизведением;
  • Storyboard, на котором можно выделить несколько диапазонов времени для разных анимаций;
  • Onion Skins, так называемая "луковая шелуха", на котором можно задать степень видимости предыдущих и последующих кадров для облегчения рисования движений

Выбор диапазона кадров для воспроизведения сделан не самым удобным образом: для этого нужно нажать кнопку меню настроек анимации (Animation settings menu) и явно указать номера начального и конечного кадров. Для облегчения этого выбора я сделал специальный плагин Storyboard timeline selector, который автоматически выбирает кадры, входящие в историю при нажатии на неё левой кнопкой мыши.

Krita сохраняет свои проекты в файлах с расширением *.kra. Это обычные ZIP-архивы, в которых находятся метаданные в виде XML-файлов и растровые данные в виде PNG-файлов. Так же в них есть PNG-файл миниатюры с именем preview.png и файл с полноразмерным сведённым изображением с именем mergedimage.png. Таким образом для импорта .kra-файла в движок Godot в виде обычного изображения не нужно никаких дополнительных инструментов. Плагину достаточно открыть архив и извлечь из него файл mergedimage.png. Но с экспортом последовательности кадров всё обстоит сложнее.

Во-первых, для экспорта последоваетельности кадров не удастся обойтись без самой Krita, потому что только она может правильно свести все данные, хранящиеся в файле и применить к результатам разные преобразования и эффекты. Во-вторых, невозможно запустить второй экземпляр Krita в то время, как первый уже запущен.

Krita в монопольном режиме использует базу данных SQLite для работы со своими ресурсами в своей папке в профиле текущего пользователя. Krita позволяет создать несколько окон, но они все управляются одним и тем же экземпляром приложения. По этому консольная команда Krita на экспорт кадров заблокируется в ожидании, пока не будут закрыты все окна Krita.

Но что же делать, если вы нарисовали еще несколько кадров, сохранили файл, и переключаетесь в окно Godot, чтобы сразу увидеть обновлённый ресурс? Импорт зависнет до тех пор, пока вы не закроете Krita! К счастью, выход есть, хоть он и не самый удобный: сделать так, чтобы Godot запускал команду Krita от имени другого пользователя. Для этого в разных операционных системах есть разные инструменты:

Windows:

Linux:

  • runuser
  • su - substitute user (подмена пользователя)
  • sudo - super user do (выполняется суперпользователем)
  • chpst - changed process state (запуск приложения с изменённым состоянием процесса)

Mac OS:

Создайте в своей операционной системе специальную учётную запись для запуска Krita. Теперь у вас будет 2 варианта работы:

  • Запускать Krita для рисования от имени дополнительного пользователя, а в Godot работать от имени основного. Тогда для экспорта плагин будет запускать команду Krita от имени основного пользователя (наиболее простой вариант, но Krita будет сохранять данные своих сессий в профиле дополнительного пользователя).
  • Запускать Krita и Godot из-под основного пользователя, но создать специальную команду или сценарий оболочки командной строки, который будет запускать Krita для экспорта из-под дополнительного пользователя (более сложный и более опасный вариант, потому что возможно вам придется в файле сценария указать пароль для дополнительного пользователя).

Скрипт PowerShell для запуска команды от имени другого пользователя с сохранёнными учётными данными

Clone this wiki locally