Illustrator CS3〜6編 同系色を選択する

今回は、Illustratorで選択した図形の中から、同系色を選択するスクリプトです。Illustratorでは同じ塗りの色、同じ線の色を選択する機能はありますが「赤っぽい色」「黄色みがかかった色」を選択する機能はありません。

以下のスクリプトが、実際に同系色を選択するものです。使い方ですが、あらかじめ図形を選択しておきます。もちろん面倒なら全部選択しても構いません。その後、スクリプトを実行します。最初に色の名前を入力します。

「赤黄緑水青紫」の色の名前一文字を入力後、色の範囲を入力します。色の範囲は角度を基準にしています(色相の値が0〜360のため)。

なお、以下のスクリプトはドキュメントのカラーモードがRGBでないと動作しません。


// 指定した色相付近の色を選択
(function(){
// 60度単位だから文字の順番(0〜6)に色名が対応
var hueList = "赤黄緑水青紫";
var text = prompt("色名を入れてください", "赤");
if (!text){ return; }
var HueValue = hueList.indexOf(text.charAt(0)) * 60; // 60度
//$.writeln("1:HueValue = "+HueValue);
if (HueValue == -1){
alert("不明な色名です。"+hueList+"のいずれかを入れてください");
return;
}
HueValue = HueValue + 360; // 360度を加算
var text = prompt("色の選択範囲(角度0-360)を入れて下さい", "20");
if (!text){ return; }
var HueRange = parseFloat(text);
var startRange = HueValue - HueRange;
var endRange = HueValue + HueRange;
//$.writeln("startRange = " + startRange);
//$.writeln("endRange = " + endRange);
//$.writeln("================");
// 選択処理
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);
H = H + 360;
//$.writeln("Hue = "+H);
if ((H < startRange) || (H > 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 };
}

実際にどのような値で、どう選択されているかは上記スクリプトの//$.writeln〜とある行の//を削除してみてください。
計算結果などがESTK (Extend Script ToolKit) のJavaScriptコンソールに出力されます。

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