2021年7月15日木曜日

Krita で Python スクリプトやってみた

<2022/09/19> Krita 5 (UTF-8 対応 Python) でバグる。続編をご覧。

 今回の話は Krita と Python。両方とも初めて取り上げます。
Krita はもう 4 年くらい使わせていただいておりますのかな、HSY カラーセレクタがついていて最高のお絵かきソフトです。
このブログは電気用でしたがなんでもいいから更新してみようと思いました。電気趣味は間欠泉のようなものでエネルギーがたまらないとやらないんだなという事が分かったような違うような。電源作ろう 1 日目!で音沙汰なくなるのネタかな?


俺どうせ形式ばった数値のファイル名しかつけねぇんだよなー!

あーあ!誰か新規ドキュメントを Ctrl+S で勝手に名前つけて保存してくれるスクリプト書いてくんねーかなー!


# coding: cp932
# coding: -*- cp932 -*-
## ウインドウズ問題。参考 http://web.wakayama-u.ac.jp/~kazama/lab/python/i18n.html

# Krita Version: 4.4.5

import os;
import datetime;
## 日時およびフォーマットの参考 https://www.tech-teacher.jp/blog/python-datetime/

filepath=  "C:/<パス>/今月の KRITA 絵/";
doc =  Krita.instance().activeDocument();
if doc is not None:
    if doc.fileName()== '' :
        """s= datetime.datetime.now().strftime("%y%m%d-%H%M.kra");
        autoNamed= os.path.join( filepath, s );
        if os.path.isfile( autoNamed ):"""
        # 規則変更。ミリ秒を使う事で既存チェックを省略。
        s= datetime.datetime.now().strftime( "%y%m%d-%H%M_%f.kra" );
        autoNamed= os.path.join( filepath, s );
        print( autoNamed );
        doc.setFileName( autoNamed );
        doc.saveAs( autoNamed );
    else:
        print( "overwrite" );
        doc.save();
else:
    print( "no document" );


…ってな感じでいちおう書けました。

filepath で指定したパスへ、「yymmdd-HHMM_ミリ秒.kra」というオレオレ命名規則で保存します。新規作成した絵を Ctrl+S で (SaveAs ダイアログを迂回して) 保存します。

メモ: 一応言葉でも書いておきます。4.4.5 において、saveAs では doc.fileName が設定されません。setFileName というメソッドがあることから推測できるようにおそらく仕様だと思います。上記のようにしてアプリケーション上の保存の挙動と今は同じになっていますが、将来変わる可能性があります。

今回の話題はルールを自動化するぞ!というところから発生しているので、我是最高的規則也と思っている管理規則も言います。保存先は %今月の絵% じゃなくて '今月の絵' フォルダです。今月が終わったらそのフォルダに先月の文字列を名づけします。1 年間に 12 回の手間がありますが、保存先を固定する方がマシーンフレンドリィです。どこまで自動化するかの線引きはこの辺までにしています。ファイルコピーが手動なので、フォルダリネームも手作業です。あんまり忘れたり突き放しすぎるのは僕にとって良い影響を与えないのでわざとそうしているような怠惰なような。趣味といっていいかも。

これを AutoSaver.py みたいな名前で shell:appdata\krita\pykrita などに保存して、Ten Scripters というプラグインに割り当てます。あとは Krita オプションのショートカットから Ctrl+S を割り当ててやります。これで Ctrl+S が自動化されます。長文生成して気づきましたが AutoSaver じゃなくて AutoNamer っぽい。

今後の課題は、Ten Scripters が実行後に「スクリプトを実行しました」というダイアログを必ず出すのでちょっとアレです。「構想は良かったんだけどなー」感がぬぐい切れません。プラグインがダイアログ抑制オプションを実装することを夢見るか、スクリプトじゃなくプラグインを書くためにまた勉強を続けるかのどちらかです。
2021-08-25: Krita5 Beta1 でダイアログ出さなくなったようです。やったね!

Python 書いたことがなかったけど if 文とかなんだよそれっていうのをチマチマ調べてなんとかなるくらいインターネットには手厚い加護がありました ty

0 件のコメント:

コメントを投稿