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

今回はIllustratorで選択した図形の中から一定範囲の輝度の図形を選択するスクリプトです。Illustratorには明るさを指定して選択する機能がないので作成してみました。
スクリプトの使い方ですが、あらかじめ対象となる図形を選択しておきます。その後、スクリプトを実行します。輝度の開始値と終了値を入力します。これで該当する範囲の輝度を持つ図形だけが選択された状態で残ります。RGB→HSL変換時に誤差が発生するのと、IllustratorではHSBなので整合性を取る時点でも若干誤差が発生することがあります。


// 指定した範囲の輝度(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 = RGBtoHSL(R, G, B);
var H = HSL.H;
var S = HSL.S;
var L = HSL.L;
//$.writeln("HSL = "+H+","+S+","+L);
L = L * 100; // 0〜100の値に調整
L = L * 2; // イラストレータがHSBなので補正
//$.writeln("Lightness = " + L);
if ((L < startRange) || (L > endRange)){
selObj[i].selected = false;
//$.writeln("選択を解除しました");
}
//$.writeln("-------------");
}
})();
// RGBから色相に変換
// (R:0~255, G:0〜255, B:0〜255, h:0〜360, s:-1〜1, l:0〜1)
function RGBtoHSL(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 ){
if ( l <= 0.5 ) s = c / (cmax + cmin); else s = c / ( 2 - (cmax + cmin));
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 };
}

Illustratorから実行せずにESTKから実行する場合は上記$.writeln()の前のコメント(//)を削除すると、どのような色相、彩度なのかがJavaScriptコンソールに出力されます。

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