ある画像に対して、何回も同じ加工がしたくなったりしませんか。
私の場合はブラウザの画面のスクリーンショットでブラウザのタブのところだけ削除したい、ということが多いです。(タブ大量開きマンなので、恥ずかしいので人にスクショを見せるときはいつも切り取ります😅)
画面のサイズもタブの位置もいつも同じなので、マクロみたいなものを作っておいてポチッと実行したらタブのところが削除されるようにしてみたいと思います。
早速作ってみよう。
スクリプターを開く
kritaを立ち上げたら、上部のメニューから ツール>スクリプト>スクリプター とたどります。
スクリプターが開きました。
入力エリアにpythonというプログラミング言語でスクリプトを書いていきます。
…と言っても、krita側がどんなスクリプトを用意しているのか解らないのでちょっと調べてみます。
kritaのスクリプトを調べる
kritaのマニュアルによると、以下のように書くことで今起動しているkritaを取得できるようです。Krita.instance()
これを利用して以下のように書き、スクリプターの実行ボタン(三角のボタン)を押します。そうすると、実行した結果が出力タブに表示されます。表示された結果がkrita側が用意しているスクリプト(というかメソッド)です。
もし表示されない場合は、メニューの「ファイル」から「保存」を選択してこのスクリプトを保存してから実行します。私の環境では、スクリプトを保存するときに自動で拡張子“.py”が付かないので自分で付ける必要がありました。
さて、ここから使えそうなメソッドに「あたり」を付けます。
ちょっと見辛いので、以下に先程の結果をコピペしました。アンダースコアが付いてるやつは特殊なので無視します。
結果
======================================
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'action', 'actions', 'activeDocument', 'activeWindow', 'addDockWidgetFactory', 'addExtension', 'addProfile', 'batchmode', 'blockSignals', 'childEvent', 'children', 'colorDepths', 'colorModels', 'connectNotify', 'createDocument', 'customEvent', 'deleteLater', 'destroyed', 'disconnect', 'disconnectNotify', 'dockers', 'documents', 'dumpObjectInfo', 'dumpObjectTree', 'dynamicPropertyNames', 'event', 'eventFilter', 'extensions', 'filter', 'filterStrategies', 'filters', 'findChild', 'findChildren', 'fromVariant', 'icon', 'inherits', 'installEventFilter', 'instance', 'isSignalConnected', 'isWidgetType', 'isWindowType', 'killTimer', 'krita_i18n', 'krita_i18nc', 'metaObject', 'moveToThread', 'notifier', 'objectName', 'objectNameChanged', 'openDocument', 'openWindow', 'parent', 'profiles', 'property', 'pyqtConfigure', 'readSetting', 'receivers', 'recentDocuments', 'removeEventFilter', 'resources', 'sender', 'senderSignalIndex', 'setActiveDocument', 'setBatchmode', 'setObjectName', 'setParent', 'setProperty', 'signalsBlocked', 'startTimer', 'staticMetaObject', 'thread', 'timerEvent', 'tr', 'version', 'views', 'windows', 'writeSetting']
画像をトリミングしたいのですが、とりあえず一番始めは今トリムしようとしている画像を取得できたら良さそうです。
activeDocumentというメソッドを使えば取得できるかな。
あたりを付けたメソッドの詳細はKrita Class Referenceというドキュメントを使って確認します。
さっきスクリプトを実行して得られた結果は、このドキュメントに書かれているメソッドと対応しています。このドキュメントでactiveDocumentを検索してみると、ちゃんとありますね。このメソッドについて説明書きがあるので確認してみると、今kritaで開いている画像を取得できそうです。
今開いている画像を取得したら、画像に対してどのような操作ができるメソッドがあるのか先程と同じ要領でprintを使って出力に書き出してみます。
acDoc=Krita.instance().activeDocument()
print(dir(acDoc))
たくさんある😅
結果
======================================
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'activeNode', 'animationLength', 'backgroundColor', 'batchmode', 'blockSignals', 'bounds', 'childEvent', 'children', 'clone', 'close', 'colorDepth', 'colorModel', 'colorProfile', 'connectNotify', 'createCloneLayer', 'createFillLayer', 'createFilterLayer', 'createFilterMask', 'createGroupLayer', 'createNode', 'createSelectionMask', 'createVectorLayer', 'crop', 'currentTime', 'customEvent', 'deleteLater', 'destroyed', 'disconnect', 'disconnectNotify', 'documentInfo', 'dumpObjectInfo', 'dumpObjectTree', 'dynamicPropertyNames', 'event', 'eventFilter', 'exportImage', 'fileName', 'findChild', 'findChildren', 'flatten', 'framesPerSecond', 'fullClipRangeEndTime', 'fullClipRangeStartTime', 'guidesLocked', 'guidesVisible', 'height', 'horizontalGuides', 'importAnimation', 'inherits', 'installEventFilter', 'isSignalConnected', 'isWidgetType', 'isWindowType', 'killTimer', 'lock', 'metaObject', 'modified', 'moveToThread', 'name', 'nodeByName', 'objectName', 'objectNameChanged', 'parent', 'pixelData', 'playBackEndTime', 'playBackStartTime', 'projection', 'property', 'pyqtConfigure', 'receivers', 'refreshProjection', 'removeEventFilter', 'resizeImage', 'resolution', 'rootNode', 'rotateImage', 'save', 'saveAs', 'scaleImage', 'selection', 'sender', 'senderSignalIndex', 'setActiveNode', 'setBackgroundColor', 'setBatchmode', 'setColorProfile', 'setColorSpace', 'setCurrentTime', 'setDocumentInfo', 'setFileName', 'setFramesPerSecond', 'setFullClipRangeEndTime', 'setFullClipRangeStartTime', 'setGuidesLocked', 'setGuidesVisible', 'setHeight', 'setHorizontalGuides', 'setName', 'setObjectName', 'setParent', 'setPlayBackRange', 'setProperty', 'setResolution', 'setSelection', 'setVerticalGuides', 'setWidth', 'setXOffset', 'setXRes', 'setYOffset', 'setYRes', 'shearImage', 'signalsBlocked', 'startTimer', 'staticMetaObject', 'thread', 'thumbnail', 'timerEvent', 'topLevelNodes', 'tr', 'tryBarrierLock', 'unlock', 'verticalGuides', 'waitForDone', 'width', 'xOffset', 'xRes', 'yOffset', 'yRes']
トリミングしたいので、cropがそれっぽいかな。
どういう機能なのかさっきのKrita Class Referenceで確認してみます。
activeDocumentのメソッドのところにDocumentへのリンクがあるのでポチッと。
ここのページにcropメソッドについての説明があるので確認してみると、四角くトリミングできるようです。
トリミングする
cropをこんな感じで指定してみました。
Krita.instance().activeDocument().crop(0,115,1365,656)
cropのお尻から2つの数値1365と656は、四角く切り抜くときの横と縦のサイズを表します。
先頭の0,115は、画像上のどの位置から四角く切り抜くのかを表しています。これは画像の左上から横と縦のポジションです。
さっそく実行ボタンを押すと、画像の残したいところだけ切り抜けました😆
思ったより簡単にできて良かったです!次回はこのスクリプトを実行しやすいようにプラグインにしてみたいと思います。
kritaのプラグインを作ってみよう
画像を切り抜きするkritaのマクロを作成したので、このマクロをプラグインとして使えるようにします。
参考
How to make a Krita Python plugin