クリエイター手抜きプロジェクト[626]Adobe Illustrator CS6〜2020編 文字の色を交互に付ける
── 古籏一浩 ──

投稿:  著者:



今回は、久々にAdobe Illustrator編です。ネタはTwitterからですが、調べたら似たようなものを2006年にも作成していました。

ただ、今回は文字の色を交互につけるだけでなく、「赤赤青」や「青赤赤青赤」のように、好きな繰り返しパターンで塗れるようにしています。

まず、文字の色(塗りの色)を交互に付けるスクリプトです。実行前に、あらかじめ交互に塗る色を設定しておきます。色は線の色と塗りの色で交互に行われます。

つまり、テキストフレームを選択したら、線の色と塗りの色を指定します。その後、スクリプトを実行すると、指定した線と塗りの色で交互に文字が塗られるということです。






// 交互に1文字ずつ塗る(塗りと線の色を交互に適用)
var sel=app.activeDocument.selection;
var color=[
app.activeDocument.defaultFillColor,
app.activeDocument.defaultStrokeColor
];
var noColor=new NoColor(); // 色なし
for(var i=0; i<sel.length; i++){
if(sel[i].typename==="TextFrame"){
var count=0;
for(var j=0; j<sel[i].characters.length; j++){
var c=sel[i].characters[j];
if(c.contents.charCodeAt(0)>31){
c.strokeColor=noColor;
c.fillColor=color[(count++)%color.length];
}
}
}
}

次に、交互に塗るのではなく「赤赤青」のようなパターンにする場合ですが、これは以下のようになります。これは塗りの色が2回で、線の色が1回という繰り返しになります。

// 文字を塗る(塗りと線の色を利用)
var sel=app.activeDocument.selection;
var color=[
app.activeDocument.defaultFillColor,
app.activeDocument.defaultFillColor,
app.activeDocument.defaultStrokeColor
];
var noColor=new NoColor(); // 色なし
for(var i=0; i<sel.length; i++){
if(sel[i].typename==="TextFrame"){
var count=0;
for(var j=0; j<sel[i].characters.length; j++){
var c=sel[i].characters[j];
if(c.contents.charCodeAt(0)>31){
c.strokeColor=noColor;
c.fillColor=color[(count++)%color.length];
}
}
}
}

繰り返す色のパターンは、以下の配列設定の部分で変更できます。上記のスクリプトでは、以下のようになっています。

var color=[
app.activeDocument.defaultFillColor,
app.activeDocument.defaultFillColor,
app.activeDocument.defaultStrokeColor
];

これを以下のように変更すると、線の色が3回で塗りの色が1回になります。

var color=[
app.activeDocument.defaultStrokeColor,
app.activeDocument.defaultStrokeColor,
app.activeDocument.defaultStrokeColor,
app.activeDocument.defaultFillColor
];

線の色や塗りの色だけでなく、任意の色も含めて色のパターンで塗ることもできます。この場合は、以下のスクリプトになります。

同様にcolor=[]配列内にカラーパターンを設定します。ただし、CMYKカラーを設定する場合は、配列内にcmyk()関数を指定します。cmyk()の括弧の中には、順番にシアン、マゼンタ、イエロー、ブラックの順番に値(0〜100)を指定します。


// 文字を塗る(塗りと線の色と任意の色を利用)
var sel=app.activeDocument.selection;
var color=[
app.activeDocument.defaultStrokeColor,
app.activeDocument.defaultFillColor,
cmyk(100,100,0,0), // 青色
cmyk(0,0,100,0) // 黄色
];
var noColor=new NoColor(); // 色なし
for(var i=0; i<sel.length; i++){
if(sel[i].typename==="TextFrame"){
var count=0;
for(var j=0; j<sel[i].characters.length; j++){
var c=sel[i].characters[j];
if(c.contents.charCodeAt(0)>31){
c.strokeColor=noColor;
c.fillColor=color[(count++)%color.length];
}
}
}
}
function cmyk(c,m,y,k){
var cc=new CMYKColor();
cc.cyan=c;
cc.magenta=m;
cc.yellow=y;
cc.black=k;
return cc;
}

なお、線の色や塗りの色が複数の場合に、スクリプトを実行するとエラーになりますので、注意してください。

また、空白も処理対象になっていますが、空白は処理したくない場合は、以下
のように31の数値を32に変更してください。

if(c.contents.charCodeAt(0)>31){
 ↓
if(c.contents.charCodeAt(0)>32){

最後に、文字がユニコードのサロゲートペアの場合は、期待通りに動作しません。Illustrator 2020でも正しく動作しません。ここらへん、InDesignなら問題なく処理できるのですが、なぜかIllustratorは10年以上(20年くらいかな)できない状態が続いています。


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


せっせとマイケルに餌をあげていたのに、母屋の方でもっとおいしい餌を与えたせいか、こっちの餌に見向きもしなくなってしまった。マイケルはグルメだったのか。

しかし、さすがに雨降りが続いたせいか、全然マイケルが来なくなってしまった。毎日来ているのは平蔵猫だけになってしまいました。平蔵猫は餌なら何でも食べるぜ、みたいな感じ。生き残るにはマイケルのように媚を売るのがいいのか、平蔵猫のように孤高のままがいいのか……。


・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram


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


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