Skip to main content
Inspiring
February 10, 2022
Answered

特定の座標のRGBパラメータを取得し、そのパラメータの数値によって条件分岐するスクリプトを作りたい

  • February 10, 2022
  • 2 replies
  • 1395 views

特定の座標のRGBパラメータを取得したいです。

 

Photoshopにはカラーピッカーがあります。

ScriptingListenerを用いて指定座標のカラーピッカーの処理を書き出したところ、

内部処理では指定座標の色をダイレクトで設定までしてしまうため、

書き出されるコードは、書き出したときにピックしたRGBパラメータに固定されてしまい、

RGBを変数として取得することができないようです。

 

具体的には、

ドキュメントの左上(1,1)座標の色が

◇赤の場合はAを実行

◇緑の場合はBを実行

◇青の場合はCを実行

というコード書きたいので、

①特定座標のRGBパラメータを取得

②パラメータを描画色に設定

③描画色が(255,0,0)の場合、Aを実行

という手順を計画していたのですが、

カラーピッカーツールは「特定座標を描画色に変更する」という処理のため、

①と②が同時に行われてしまいます。

結果としてScriptingListenerに書き出されるコードは、

「特定の座標のRGBを取得する」ではなく、

「(r,g,b)を描画色に設定しました」となって出力されてしまうのです。

したがって、ScriptingListenerで書き出しを行う際の(1,1)座標がRGB(255,0,0)だった場合、

このコードで作成するスクリプトは常に描画色がRGB(255,0,0)がセットされてしまい、

Aを実行しかできなくなります。

 

カラーピッカーで「指定座標のRGB取得する」を実現する方法、

また、カラーピッカーを用いずに、「選択範囲のRGBを取得」など代替できる方法等はありますでしょうか?

This topic has been closed for replies.
Correct answer Ten A

カラーピッカーしか手が無いんですが、

 

var pcr = app.activeDocument.colorSamplers.add([x,y]);
var  pxColor= [
 Math.floor (pcr.color.rgb.red),
 Math.floor (pcr.color.rgb.green),
 Math.floor (pcr.color.rgb.blue)
];

 

こんな感じですかねぇ…

ケータイで書いてるのでアレですが、多分動くと思います。

2 replies

Ten A
Community Expert
Community Expert
February 14, 2022

まずpxColor自体は配列ですから各要素ごとに比較するか、joinして文字列化しないとダメです。
意図するワークフローに対しては各要素を比較するのが自然ですから…

 

if (pxColor[0]==255&&pxColor[1]==0&&pxColor[2]==0) alert("matched")

 

こんな感じの記述になります。

Inspiring
February 16, 2022

「配列はjoinする」

「&&でjoinできる」

「[0],[1],[2]で配列の一つ一つを取得できる」

全て知らなかったので大変助かりました。

おかげさまで作りたいスクリプトが作成できました。

どうもありがとうございました。

Ten A
Community Expert
Ten ACommunity ExpertCorrect answer
Community Expert
February 11, 2022

カラーピッカーしか手が無いんですが、

 

var pcr = app.activeDocument.colorSamplers.add([x,y]);
var  pxColor= [
 Math.floor (pcr.color.rgb.red),
 Math.floor (pcr.color.rgb.green),
 Math.floor (pcr.color.rgb.blue)
];

 

こんな感じですかねぇ…

ケータイで書いてるのでアレですが、多分動くと思います。

Inspiring
February 14, 2022

Ten Aさん

ありがとうございます。

ご教示頂きましたコードでカラーの取得ができました。

 

早速テストしたのですが、条件分岐の件で再度知見を頂けますでしょうか?

下記のコードで原色3色をサンプリングしたところ、

全て青判定になってしまいます。

どこが間違っていますか?

ちなみにRGBを(255,0,0)と括弧で閉じてでも試しましたが、

その場合はすべて「当てはまらない」となってしまいます。

 

//指定座標のカラーチェック
var pcr = app.activeDocument.colorSamplers.add([1,1]);
var pxColor= [
Math.floor (pcr.color.rgb.red),
Math.floor (pcr.color.rgb.green),
Math.floor (pcr.color.rgb.blue)
];

//出力チェック
$.writeln(pxColor);
$.writeln(pcr.color.rgb.red);
$.writeln(pcr.color.rgb.green);
$.writeln(pcr.color.rgb.blue);

//条件分岐
if (pxColor == 255,0,0){
alert("これは赤");
}else if
(pxColor == 0,255,0){
alert("これは緑");
}else if
(pxColor == 0,0,255){
alert("これは青");
}else{
alert("当てはまらない")
}