前回はkritaのスクリプターという機能を使って、マクロっぽいものを書いてみました。
今回はこのマクロをプラグインとして使えるようにしてみたいと思います!
kritaで同じ加工を何回もやりたい!pythonを使って効率化してみる
ブラウザのスクリーンショットでタブのところだけ削除したい。画面のサイズもタブの位置もいつも同じなので、kritaでマクロみたいなものを作っておいてポチッと実行したらタブのところが削除されるようにしてみたいと思います。
kritaの公式マニュアル“How to make a Krita Python plugin — Krita Manual 5.0.0 documentation”だと話の流れが良くわからないところがあったので、途中からこちらのマニュアル“Krita Scripting School”を参考にしました。こちらも公式が提供してるようです。
必要な情報がきれいにまとまっているので、kritaをもっと拡張して便利に使いたいときはこのサイトを参考にするのが良さそう。覚えておこう💡
プラグインを置くディレクトリの確認
まずはじめに、kritaのプラグインの置き場所について確認しましょう。
プラグインはリソースフォルダの下のあるpykritaに置く必要があります。
私はLinuxなのでpykritaディレクトリは下記の場所にありました。所定の場所になければ作成します。
/home/fukari/.local/share/krita/pykrita
各OSでの場所は以下になります。
[Linux]
$HOME/.local/share/krita/
[Windows]
%APPDATA%\krita\
[macOS]
~/Library/Application Support/Krita/
[kritaをwindowsストアからインストールした場合]
%LOCALAPPDATA%\Packages\49800Krita_RANDOM STRING\LocalCacheRoamingkrita
📕Resource Management — Krita Manual 5.0.0 documentation
プラグインのディレクトリ構成を作る
構成の概要
次に、kritaのプラグインの構成について確認しましょう。
プラグインはスクリプトファイルが入ってるディレクトリと.desktopファイルの2つで構成されます。
具体的には、kritaのプラグインを作るためにファイルやディレクトリを以下のような構成にする必要があります。
$ tree pykrita/
pykrita/
├── プラグイン名
│ ├── __init__.py
│ └── プラグイン名.py
└── プラグイン名.desktop
テンプレート
上記のような構成を作るのが面倒なら、こちらのKrita Scripting Schoolからテンプレートがダウンロードできます。本文中に“Download blank extension template ZIP”とあるのでそこからダウンロードします。このテンプレートは、kritaのバージョンをポップアップでお知らせするプラグインとして動くようになっています。pykritaディレクトリに解凍すれば、kritaですぐに実行できます。これを改造しながら作るとはやく作れそうですね。
実際に作ってみる
今回はテンプレートを改造して作ることはせずに、1から作っていきたいと思います。
画像をトリミングするスクリプトをプラグインにするつもりなので、プラグイン名をmy_crop_pluginとします。
まずはpykritaディレクトリの中にmy_crop_pluginという名前のディレクトリと、my_crop_plugin.desktopというファイルを作りました。desktopファイルは今の段階では空で、とりあえず作った状態です。
次に、my_crop_pluginディレクトリの中にmy_crop_plugin.pyと__init__.pyという名前のファイルを作りました。こちらのファイルも中身が空っぽのものを作っておいて後で中身を書いていくことにします。中身についてはダウンロードしたファイルを参考にしようと思います。
今のところ、こんな感じになっています。
my_crop_plugin.desktopの内容
kritaに自作プラグインを認識してもらうために以下の内容を書きます。
イコールでつながれた右側に自分のプラグインに合った値を書きます。自分のプラグイン用に書き換えが必要なところだけ太字にしました。
[Desktop Entry]
Type=Service
ServiceTypes=Krita/PythonPlugin
X-KDE-Library=my_crop_plugin(スクリプトを入れたディレクトリ名)
X-Python-2-Compatible=false
X-Krita-Manual=myCropPluginManual.html(htmlで自作マニュアルが書ける)
Name=my_crop_plugin(プラグインマネージャに表示される名前)
Comment=crop only viewing area on browser screenshot.(プラグインマネージャに表示されるコメント)
X-Python-2-Compatibleは、プラグインがpythonのバージョン2と3の間で互換性があるかどうかを指定するもののようです。とりあえずマニュアル通りにfalseに設定しました。他のところは自分のプラグインに合わせて書き換えます。
プラグインマネージャに表示する名前は、この名前を元にして裏でディレクトリが作成されるのでスペースの入った名前は付けない方が良さそうです。
init.pyの内容
init.py ファイルに下記のコードを書きます。
kritaに自作プラグインを追加する処理です。
MyCropPluginクラスは次に紹介するmy_crop_plugin.pyで定義します。
from .my_crop_plugin import MyCropPlugin
Krita.instance().addExtension(MyCropPlugin(Krita.instance()))
my_crop_plugin.pyファイルの内容
プラグインの実際の処理内容を書きます。
cropというメソッドを定義して前回作成したマクロをそこにコピペしました。
createActionメソッドに渡している“MyCropAction”は他と被らない名前にします。“my crop”はkritaのメニューから ツール>スクリプト とたどったときに表示される名前です。
ツールバーにこの機能を表示したいので、setIconメソッドを使ってハサミのアイコンで表示されるようにしました。
利用できるアイコンは“Krita Scripting School”のメニューのIcon Libraryで、確認できます。
from krita import *
class MyCropPlugin(Extension):
def __init__(self, parent):
super().__init__(parent)
# Krita.instance() exists, so do any setup work
def setup(self):
pass
def crop(self):
Krita.instance().activeDocument().crop(0,115,1365,656)
# called after setup(self)
def createActions(self, window):
action = window.createAction("MyCropAction", "my crop")
action.setIcon(Krita.instance().icon('edit-cut'))
action.triggered.connect(self.crop)
メニューに表示する
やっとここまできました😆
プラグインをメニューから使えるようにします!
まず、作成したプラグインをロードするためにkritaを再起動します。プラグインを変更する度に再起動が必要になります。
kirtaが起動したら 設定>kritaの設定を変更 とたどって設定画面を開きます。
設定画面を開いたら左側のペインから“Pythonプラグインマネージャ”を選択します。
表示されたプラグインのリストに自作プラグインの名前が表示されているので、チェックを付けkritaを再起動します。
ここで自作プラグインの名前がグレーアウトして選択できない場合は、プラグイン側にエラーがあるので修正が必要です。
kritaが起動したら、ツール>スクリプト とたどっていくと、自分が作成したmy cropが表示されているのが確認できます。
ツールバーに表示する
やっと自作プラグインをメニューから実行できたわけですが、毎度メニューをたどって実行するのは面倒くさいのでツールバーにボタンとして表示させたいと思います。
メニューから 設定>ツールバーを設定 とたどります。左側のペインから“my crop”を探してフォーカスしたら、“>”ボタンを押して右側のペインに移します。今回は分かりやすいように新規作成アイコンの隣に表示されるようにしました。
完成ーー😆これでこのアイコンを押せばいつでも自作プラグインを実行できます。