Illustrator CS3〜6編 一定範囲の彩度の図形を選択する

色相、輝度とくれば最後に残ったのは「彩度」です。今回はIllustratorで選択した図形の中から一定範囲の彩度の図形を選択するスクリプトです。このスクリプトを使えば特定の彩度の範囲の図形だけを選択することができます。
スクリプトの使い方ですが、あらかじめ対象となる図形を選択しておきます。その後、スクリプトを実行します。彩度の開始値と終了値を入力します(入力する値はカラーパネルの値と同じです)。これで該当する範囲の彩度を持つ図形だけが選択された状態で残ります。彩度の値はカラーパネルに表示される値と同じはずです。ただ、カラーパネルで表示されるのは小数点以下第二位までです。スクリプトでは、それよりも高い精度なので微妙な彩度を選択する場合は、誤差も考慮しておいてください。


// 指定した範囲の彩度(0〜100)を選択
(function(){
var text = prompt("開始範囲(彩度0〜100)入れてください", 30);
if (!text){ return; }
var startRange = parseFloat(text);
var text = prompt("終了範囲(彩度0〜100)入れてください", 50);
if (!text){ return; }
var endRange = parseFloat(text);
//$.writeln("startRange = "+startRange);
//$.writeln("endRange = "+endRange);
// 選択処理
var selObj = app.activeDocument.selection;
for(var i=0; i<selObj.length; i++){
var RGBcolor = selObj[i].fillColor;
var R = RGBcolor.red;
var G = RGBcolor.green;
var B = RGBcolor.blue;
//$.writeln("RGB = "+R+","+G+","+B);
var HSL = RGBtoHSL2(R, G, B);
var H = HSL.H;
var S = HSL.S;
var L = HSL.L;
//$.writeln("HSL = "+H+","+S+","+L);
S = S * 100; // イラストレータ用に補正
if ((S < startRange) || (S > endRange)){
selObj[i].selected = false;
//$.writeln("選択を解除しました");
}
//$.writeln("-------------");
}
})();
// RGBから色相(HSB)に変換
// (R:0~255, G:0〜255, B:0〜255, h:0〜360, s:0〜1, l:0〜1)
function RGBtoHSL2(r, g, b){
var h = 0;
var s = 0;
var l = 0;
var cmax, cmin;
if ( r >= g ) cmax = r; else cmax = g;
if ( b > cmax) cmax = b;
if ( r <= g ) cmin = r; else cmin = g;
if ( b < cmin) cmin = b;
l = (cmax + cmin) / 2;
var c = cmax - cmin;
if ( c != 0 ){
s = ((cmax - cmin) / cmax);
if ( r == cmax){ h = ( g - b ) / c;
}else{
if (g == cmax){ h = 2 + ( b - r ) / c;
}else{
if ( b == cmax ) h = 4 + ( r - g ) / c;
}
}
h = h * 60;
if ( h < 0 ) h = h + 360;
}
return { H:h, S:s, L:l/255 };
}

[サンプルをダウンロード]