クリエイター手抜きプロジェクト[323]Illustrator CS3〜6編 同系色を選択する/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,000文字)


今回は、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コンソールに出力されます。


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/ >

昔作った(26年前)ゲームが、最新のマシンで再現&3D化されました......。最新の技術で古い技術を再現したのが以下のページ。ゼビウス移植では有名なページです。

・〜MZ-700タイニーゼビウスが滑らかに動いたら〜
< http://homepage3.nifty.com/ae85fcmxs/02-info-soft-xevious-e12.html >

7月8日(日)に長野県塩尻市にある塩尻インキュベーションプラザ(SIP)にて「Google I/O 2012 報告会」が行われます。詳しくは以下のページで。40名までですが、まだ人数には余裕がありますので、お近くの方はいらして下さい。

・DevFestX Japan 2012 Summer
< http://googledevjp.blogspot.jp/2012/06/devfestx-japan-2012-summer.html >

・毎度おなじみアスキーの連載
 「WebRTCでブラウザーが防犯カメラに!」
< http://ascii.jp/elem/000/000/702/702494/ >

・PDF構造解説
< http://www.amazon.co.jp/dp/4873115493 >

・10日で覚えるHTML5入門教室
< http://www.amazon.co.jp/dp/4798124184 >

・AndroidのためのHTML5本格アプリ開発
< http://www.amazon.co.jp/dp/4897978971/ >

・新標準HTML5 & CSS3辞典
< http://www.amazon.co.jp/dp/4844331752/ >

・改訂5版JavaScriptポケットリファレンス
< http://www.amazon.co.jp/dp/4774148199 >

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/ >
吉田印刷所の「印刷の泉」でも購入できるようになりました。