Photoshop移動ツールのオプションをキーボードで切り替えたい。
需要はあるけど、力不足で実現できないシリーズ(´д`)誰か助けて!
Photoshopの「移動ツール」は、自動選択の際、選択対象をグループにするかレイヤーにするかを切り替える事ができます。ですが、変種作業中に、画面上部のツールオプションの所までマウス持っていくのがめんどくさい…といいますか、集中が途切れてどこ見てたかわからなくなることがしばしばあり、ややストレスです。
これをショートカットキーで何とかしたいと思ったのが運の尽き…。
jsxスクリプトを使ってみよう(・∀・)
PhotoshopにはJavascriptであらゆる操作などを制御できるスクリプト機能が備わっています。まあ、Excelのマクロみたいなもんですが、アクションよりも自由度が高く、移植性も高いのですが、それにともなってハードルも高いのです…
ファイル→スクリプト→と、たどれば、プリセットされているスクリプト一覧が出てきます。
高い理想をもとに崇高なフローチャートを考える
1つのスクリプトにまとめて、トグル操作ができればいいなと思いました。
誰しもが考えるであろう単純なロジック
1.現在の移動ツールにおける自動選択オプションとして選ばれているパラメータ(レイヤーorグループ)を取得。
↓
2.レイヤーだったらグループに切り替え
グループだったらレイヤーに切り替え
↓
作業完了w!
いやー、簡単そうですね(・∀・)ではさっそく、スクリプトに落とし込んでいきましょう。
…jsxのリファレンスが複雑難解すぎて挫折しました(´д`)
なにが何を指しているのかわからん…
悔しいので妥協案を模索した
妥協案:ツールプリセット使ってみよう
※ツールプリセットとは、よく使うツールの設定パターン(たとえば今回のように、”移動ツール・自動選択ON・レイヤーを選択選択・バウンディングボックスを表示”など)を覚えさせておき、ワンクリックで呼び出すための機能です。
色々ググってると、任意のツールプリセットを呼び出すコードが紹介されていました。いっぺんこれでやってみよう。
ツールプリセットを2つ作る
呼び出すべきツールプリセットを2パターンつくります。
1.mv_layer : レイヤーを自動選択するプリセット
このプリセットを選ぶとレイヤー選択になる。
2.mv_group : グループを自動選択するプリセット
このプリセットを選ぶとグループ選択になる。
プリセット名は日本語でも可能ですが、スクリプトから呼び出すので半角英数にしといたほうが気持ち悪くなくていいかもしれません。
ツールプリセットを切り替えるjsxスクリプト
難産の果てに生みだされたスクリプトがこちら…。
//グループが選択されるようにする
selectPreset(‘mv_group’);
//または、レイヤーが自動選択されるようにする
selectPreset(‘mv_layer’);/* setName で指定したプリセットを選択する */
function selectPreset(setName){
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putName( stringIDToTypeID( “toolPreset” ), setName );
desc.putReference( charIDToTypeID( “null” ), ref );
executeAction( charIDToTypeID( “slct” ), desc, DialogModes.NO );
};
selectPreset(‘呼び出したいプリセット’);で、動作可能。
selectPresetの引数を変えた、スクリプトファイルを2つ用意する。
mv_group_select.jsx
mv_layer_select.jsx
できあがったjsxファイルをプリセットスクリプトフォルダに入れておく
Photoshop CC 2015の場合は
C:\Program Files\Adobe\Adobe Photoshop CC 2015.5\Presets\Scripts
に2つのスクリプトファイルを入れて、Photoshopを再起動。
すると、ファイル→スクリプト の中に作成したスクリプトが表示される。
いずれかのスクリプトを選んで走らせると、プリセットを切り替えることが出来ている…!
あとは、それぞれのスクリプトを適当なショートカットキーに割り当てればキーボード操作で切り替える事が出来る!のだが…。
ショートカットキーが2つ必要になってしまうw
1つですら厳しいのに2つだなんて、使えるキーが空けられないw、なにより不便すぎる…やはりトグルで切り替えられないと使い物にならない。
setter/getterはあるようなので、技術的には絶対出来るハズなんだけど、リファレンスを見ても良さそうなサンプルが見つからず大苦戦。ちょっと頭を冷やした方がいいかもしれないので、一旦挫折します(ぉ
Excelで言うところのマクロ記録ツールのようなものはもちろん用意されているが
一般的な流れ作業のスクリプトはScripting Listenerプラグインをつかって自動記録後、それを編集する…という方法で作成します。
Photoshop自動化のjsを書くときに使うScripting Listenerプラグイン、CS6以上での有効化方法 – Qiita
ですが、今回のように「ツールオプションを切り替える」だけで、データの変更を伴わない操作は記録されないため、この方法は使えません。
ゆえに、リファレンスを追っかけて何か方法を探す必要があるのですが、そこまでして感が無性に強くなってきてしまったため挫折しました。
誰かヒントを下さいm(__)m