- ベストアンサー
PhotoShopで色域指定による範囲選択をJavaScriptで実行する方法
- PhotoShopで色域指定による範囲選択をJavaScriptで実行する方法をご紹介します。
- 画像をPhotoShopに読み込んだ後、黒色(許容度20)の色域指定による範囲指定をするスクリプトの作成方法について説明します。
- 色域指定のアクションを作成してスクリプトに取り込むことも可能ですが、自作のスクリプトで実行する方法についても解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ScriptingListenerプラグインを使用しなければ実現できないケースなどを > 説明した記載がレファレンス等にあれば教えて頂けると助かります。 そのものズバリは見たことがないです。すっきりしないとは思いますが、強いて挙げれば「JavaScript Scripting Reference」の The Action Manager allows you to write scripts that target Adobe Photoshop CS2 functionality that is not otherwise accessible in the scripting interface, such as third party plug-ins and filters. です。私は「JavaScript Scripting Reference」でメソッドが見つからないときに、ScriptingListener を使うことにしています。 >ScriptingListenerプラグインを使用しなくてもスクリプティングできる方法があると考えていました。 ScriptingListener を使いたくない気持ちが伝わってきます。私も ScriptingListener はできれば使いたくなかった。ScriptingListener が吐き出すコードは意味不明で汚い上、この部分だけ自分のコントロール外でした。そこで私は折衷案として event ID や key ID(例えば "ClrR")は、本来の名前(eventColorRange)を利用し var eventColorRange = charIDToTypeID( "ClrR" ); のように清書し且つ function 化し、見通しを多少よくして折り合いを付けています。で、本来の名前をどのように調べてるかというと SDK のドキュメント「Adobe Photoshop 5.0 Actions Event Guide」からです。Adobe から最新の「Photoshop SDK」をダウンロードしてくればドキュメントに含まれているかも(未確認)。
その他の回答 (2)
- sp201073
- ベストアンサー率81% (44/54)
No.1 です。 間違えました。最初の2行入れ替えてください。 あと、ソースをコピー&ペーストしたとき "A " , "B " の4か所、それぞれABのあとが半角スペース3つ("A○○○")になるように調整してください (自分のブラウザ環境だとスペースが一つになってしまいました) ky=20; selcol(0,0,0); function selcol(cL,cA,cB) { cLAB = [cL ,cA ,cB]; var idClrR = charIDToTypeID( "ClrR" ); var desc2 = new ActionDescriptor(); var idFzns = charIDToTypeID( "Fzns" ); desc2.putInteger( idFzns, ky ); var idMnm = charIDToTypeID( "Mnm " ); var desc3 = new ActionDescriptor(); var idLmnc = charIDToTypeID( "Lmnc" ); desc3.putDouble( idLmnc, cLAB[0] ); var idA = charIDToTypeID( "A " ); //←スペース注意 desc3.putDouble( idA, cLAB[1] ); var idB = charIDToTypeID( "B " ); //←スペース注意 desc3.putDouble( idB, cLAB[2] ); var idLbCl = charIDToTypeID( "LbCl" ); desc2.putObject( idMnm, idLbCl, desc3 ); var idMxm = charIDToTypeID( "Mxm " ); var desc4 = new ActionDescriptor(); var idLmnc = charIDToTypeID( "Lmnc" ); desc4.putDouble( idLmnc, cLAB[0] ); var idA = charIDToTypeID( "A " ); //←スペース注意 desc4.putDouble( idA, cLAB[1] ); var idB = charIDToTypeID( "B " ); //←スペース注意 desc4.putDouble( idB, cLAB[2] ); var idLbCl = charIDToTypeID( "LbCl" ); desc2.putObject( idMxm, idLbCl, desc4 ); var idcolorModel = stringIDToTypeID( "colorModel" ); desc2.putInteger( idcolorModel, 0 ); executeAction( idClrR, desc2, DialogModes.NO ); }
お礼
ご回答ありがとうございました。
補足
ご回答ありがとうございます。 >doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか? 説明が不正確で申し訳ありませんでした。 ScriptingListenerプラグインを使用してアクション管理したものです。 >いずれにしてもどちらかでしか方法はないと思います・・・ ScriptingListenerプラグインを使用しなくてもスクリプティングできる方法があると考えていました。 ScriptingListenerプラグインを使用しなければ実現できないケースなどを説明した記載がレファレンス等にあれば教えて頂けると助かります。
- sp201073
- ベストアンサー率81% (44/54)
>色域指定のアクションを作成してスクリプトに取り込むことはできるのですが、 doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか? いずれにしてもどちらかでしか方法はないと思います・・・ もしScriptingListenerプラグインでもよければこんな感じで(CS4でしか確認してませんが) selcol(0,0,0); //指定色域(LAB) ky=20; //許容量 function selcol(cL,cA,cB) { cLAB = [cL ,cA ,cB]; var idClrR = charIDToTypeID( "ClrR" ); var desc2 = new ActionDescriptor(); var idFzns = charIDToTypeID( "Fzns" ); desc2.putInteger( idFzns, ky ); var idMnm = charIDToTypeID( "Mnm " ); var desc3 = new ActionDescriptor(); var idLmnc = charIDToTypeID( "Lmnc" ); desc3.putDouble( idLmnc, cLAB[0] ); var idA = charIDToTypeID( "A " ); desc3.putDouble( idA, cLAB[1] ); var idB = charIDToTypeID( "B " ); desc3.putDouble( idB, cLAB[2] ); var idLbCl = charIDToTypeID( "LbCl" ); desc2.putObject( idMnm, idLbCl, desc3 ); var idMxm = charIDToTypeID( "Mxm " ); var desc4 = new ActionDescriptor(); var idLmnc = charIDToTypeID( "Lmnc" ); desc4.putDouble( idLmnc, cLAB[0] ); var idA = charIDToTypeID( "A " ); desc4.putDouble( idA, cLAB[1] ); var idB = charIDToTypeID( "B " ); desc4.putDouble( idB, cLAB[2] ); var idLbCl = charIDToTypeID( "LbCl" ); desc2.putObject( idMxm, idLbCl, desc4 ); var idcolorModel = stringIDToTypeID( "colorModel" ); desc2.putInteger( idcolorModel, 0 ); executeAction( idClrR, desc2, DialogModes.NO ); }
お礼
ご回答ありがとうございます。 本回答の後に補足して頂いた方に返答します。
補足
>doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか? 説明が不正確で申し訳ありませんでした。 ScriptingListenerプラグインを使用してアクション管理したものです。 >いずれにしてもどちらかでしか方法はないと思います・・・ ScriptingListenerプラグインを使わないでもスクリプティングできる方法があると考えていました。こういうケースではScriptingListenerを使わなければ実現できない、といった記載がレファレンス等の資料にあれば教えて頂けますと助かります。
お礼
ScriptingListenerを使用したコードは仰るとおりコントロール外で柔軟性がありません。 頂いた情報を参考にしてもう少し調べてみようと思います。 詳細にご回答頂き本当にありがとうございました。