Photoshopで描画に関するカラーを取り扱う場合、SolidColorオブジェクトでやり取りすることになります。

以下の例では描画色を取得し、その後RGBのレッドを設定しています。

//描画色を取得・変更
var fgColor= app.foregroundColor; //描画色を取得(SolidColorオブジェクト)
$.writeln(fgColor.rgb.red+','+fgColor.rgb.green+','+fgColor.rgb.blue);
var cObj = new SolidColor();
cObj.rgb.red= 255;
cObj.rgb.green= 0;
cObj.rgb.blue= 0;
app.foregroundColor= cObj;

参照:描画色、背景色の取得・変更

 

SolidColorオブジェクトにはrgbプロパティだけではなく、以下のようにPhotoshopで使用する全てのカラーモデルのプロパティがあり、これらのプロパティのいずれかに値を設定すると、他のプロパティから異なるカラーモデルの値を取り出すことが可能です。

cmyk CMYKColor CMYKカラー
gray GrayColor グレースケール
hsb HSBColor HSBカラー
lab LabColor labカラー
nearestWebColor RGBColor 最も近いwebセーフカラー
rgb RGBColor RGBカラー

 

// 異なるカラーモデルの値を取得
var cObj= new SolidColor();
// RGBで設定
cObj.rgb.red= 255;
cObj.rgb.green= 48;
cObj.rgb.blue= 0;
// webセーフカラーで取得
$.writeln(
cObj.nearestWebColor.red
+','+cObj.nearestWebColor.green
+','+cObj.nearestWebColor.blue
);
// 255, 51, 0

 

<CMYKについての留意点>

先の例のようにSolidColorオブジェクトを介して異なるカラーモデルの値を取り出すことはできますが、RGB<>CMYKの場合、Photoshopに設定されているカラープロファイルにしたがって値変換が行われるので、その点に留意しなければなりません。

Japan Color 2001 Coated

Japan Color 2001 Uncoated

参照:ドキュメントのカラープロファイル名を取得・変換する

 

また、SolidColorオブジェクトは先に設定されたカラーモデルが優先されるため、以下のようなことが起こります。

var cObj= new SolidColor();
// RGBで設定
cObj.rgb.red= 255;
cObj.rgb.green= 0;
cObj.rgb.blue= 0;
// CMYKで設定
cObj.cmyk.cyan= 0;
cObj.cmyk.magenta= 100;
cObj.cmyk.yellow= 100;
cObj.cmyk.black= 0;
// CMYKで取得
$.writeln(
cObj.cmyk.cyan
+','+cObj.cmyk.magenta
+','+cObj.cmyk.yellow
+','+cObj.cmyk.black
);
// M100, Y100にはならない≒[32,99,100,1]

上記の場合はRGBカラーモデルが優先されているので、次に設定されたCMYKの値はRGBに変換されます。よってCMYKで取得しても大抵の場合は同じ値になりません。

もちろんCMYKが優先されている場合はそのようなことは起こりません。

var cObj= new SolidColor();
// CMYKで設定
cObj.cmyk.cyan= 0;
cObj.cmyk.magenta= 100;
cObj.cmyk.yellow= 100;
cObj.cmyk.black= 0;
// CMYKで取得
$.writeln(
cObj.cmyk.cyan
+','+cObj.cmyk.magenta
+','+cObj.cmyk.yellow
+','+cObj.cmyk.black
);
// M100, Y100になる

 

なお、取得したSolidColorオブジェクトがどんなカラーモデルなのかは、SolidColorオブジェクトのmodelプロパティから参照することができます。

// カラーモデルを取得
var cObj= new SolidColor();
// RGBで設定
cObj.rgb.red= 255;
cObj.rgb.green= 0;
cObj.rgb.blue= 0;
$.writeln(cObj.model); //ColorModel.RGB

返り値はColorModel定数(参照)です。

 

<カラーの比較>

SolidColorオブジェクト同士の比較にIF文は使えませんが、全ての値をいちいち比較する必要はありません。

カラーを比較するために、SolidColorオブジェクトにはisEqual関数が用意されています。

//カラーの比較
var cObjA= new SolidColor();
cObjA.rgb.red= 255;
cObjA.rgb.green= 0;
cObjA.rgb.blue= 0;
var cObjB= new SolidColor();
cObjB.rgb.red= 254;
cObjB.rgb.green= 0;
cObjB.rgb.blue= 0;
var f= cObjA.isEqual (cObjB);
$.writeln(f);

 

 

Joomla templates by a4joomla