• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PhotoShopで色域指定による範囲選択をJavaScriptで実行)

PhotoShopで色域指定による範囲選択をJavaScriptで実行する方法

このQ&Aのポイント
  • PhotoShopで色域指定による範囲選択をJavaScriptで実行する方法をご紹介します。
  • 画像をPhotoShopに読み込んだ後、黒色(許容度20)の色域指定による範囲指定をするスクリプトの作成方法について説明します。
  • 色域指定のアクションを作成してスクリプトに取り込むことも可能ですが、自作のスクリプトで実行する方法についても解説します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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」をダウンロードしてくればドキュメントに含まれているかも(未確認)。

haru-koi
質問者

お礼

ScriptingListenerを使用したコードは仰るとおりコントロール外で柔軟性がありません。 頂いた情報を参考にしてもう少し調べてみようと思います。 詳細にご回答頂き本当にありがとうございました。

その他の回答 (2)

  • sp201073
  • ベストアンサー率81% (44/54)
回答No.2

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 ); }

haru-koi
質問者

お礼

ご回答ありがとうございました。

haru-koi
質問者

補足

ご回答ありがとうございます。 >doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか? 説明が不正確で申し訳ありませんでした。 ScriptingListenerプラグインを使用してアクション管理したものです。 >いずれにしてもどちらかでしか方法はないと思います・・・ ScriptingListenerプラグインを使用しなくてもスクリプティングできる方法があると考えていました。 ScriptingListenerプラグインを使用しなければ実現できないケースなどを説明した記載がレファレンス等にあれば教えて頂けると助かります。

  • sp201073
  • ベストアンサー率81% (44/54)
回答No.1

>色域指定のアクションを作成してスクリプトに取り込むことはできるのですが、 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 ); }

haru-koi
質問者

お礼

ご回答ありがとうございます。 本回答の後に補足して頂いた方に返答します。

haru-koi
質問者

補足

>doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか? 説明が不正確で申し訳ありませんでした。 ScriptingListenerプラグインを使用してアクション管理したものです。 >いずれにしてもどちらかでしか方法はないと思います・・・ ScriptingListenerプラグインを使わないでもスクリプティングできる方法があると考えていました。こういうケースではScriptingListenerを使わなければ実現できない、といった記載がレファレンス等の資料にあれば教えて頂けますと助かります。

関連するQ&A