見出し画像

Illustratorでドキュメントのカラーモードが「CMYK」のときには「K100」に、「RGB」のときには「R0G0B0」にするスクリプト

これまで「塗り:スミ、線:なし」に設定するにはアクションを使い、キーボードショートカットで設定してきましたが、いかんせん、CMYK/RGBを行き来するとき、うまくありません。

次のように書くことでドキュメントのカラーモードに応じて、「K100」または「R0G0B0」に設定できました。


#target 'Illustrator'

function setRGBColor(r,g,b){
   var tmpColor = new RGBColor();
   tmpColor.red = r;
   tmpColor.green = g;
   tmpColor.blue = b;
   return tmpColor;
}
function setCMYKColor(c,m,y,k){
   var tmpColor = new CMYKColor();
   tmpColor.cyan = c;
   tmpColor.magenta = m;
   tmpColor.yellow = y;
   tmpColor.black = k;
   return tmpColor;
}

selObj = activeDocument.selection;

if ( activeDocument.documentColorSpace == DocumentColorSpace.CMYK ) {
   for (i=0; i<selObj.length; i++){
      selObj[i].filled = true; // 塗りあり
      selObj[i].fillColor = setCMYKColor(0,0,0,100); // 塗りの色を指定
      selObj[i].stroked = false; // 線なし
      selObj[i].opacity = 100;  // 不透明度100%
   }
   } else {
   for (i=0; i<selObj.length; i++){
      selObj[i].filled = true; // 塗りあり
      selObj[i].fillColor = setRGBColor(0,0,0); // 塗りの色を指定
      selObj[i].stroked = false; // 線なし
      selObj[i].opacity = 100;  // 不透明度100%
   }
}

ちょっと冗長だよな…と思って短くしたく、次のように書いてもOKでした。

#target 'Illustrator'
function setRGBColor(r,g,b){
   var tmpColor = new RGBColor();
   tmpColor.red = r;
   tmpColor.green = g;
   tmpColor.blue = b;
   return tmpColor;
}
function setCMYKColor(c,m,y,k){
   var tmpColor = new CMYKColor();
   tmpColor.cyan = c;
   tmpColor.magenta = m;
   tmpColor.yellow = y;
   tmpColor.black = k;
   return tmpColor;
}
selObj = activeDocument.selection;

for (i=0; i<selObj.length; i++){
   selObj[i].stroked = false; // 線なし
   selObj[i].opacity = 100;  // 不透明度100%
   //selObj[i].filled = true; // 塗りあり
   selObj[i].fillColor = setRGBColor(0,0,0); // 塗りの色を指定
}
if ( activeDocument.documentColorSpace == DocumentColorSpace.CMYK ) {
   for (i=0; i<selObj.length; i++){
      selObj[i].fillColor = setCMYKColor(0,0,0,100); // 塗りの色を指定
   }
}

見よう見まねレベルでお恥ずかしいのですが、ぜひツッコミお願いします!

したたか企画さんの添削

リスペクトしてやまないしたたか企画さんが添削してくださいました。感謝!!!

実際、実行速度として「ちょっと遅いな…」と思っていたので、とても勉強になります。

さらに、完成版も!!!

がんばって写経しました! 正直、わからない箇所が多いので、たまに見返してみます。

#target 'Illustrator'
(function() {
// 書類や選択アイテムを取得し、なければ終了する
 if (app.documents.length <= 0) {return;}
 var doc = app.activeDocument;
 var selObjs = doc.selection;
 if (selObjs.length <= 0) {return;}
 // 塗りの色を作る
 var targetColor;
 if (doc.documentColorSpace == DocumentColorSpace.CMYK) {
   targetColor = getCYMKColor(0, 0, 0, 100);
 } else {
   targetColor = getRGBColor(0, 0, 0);
 }
 // 選択アイテムすべて線はなし、塗りは指定色にする
 doc.defaultStroked = false;
 doc.defaultFillColor = targetColor;
 //選択アイテムすべての不透明度を100にする
 for (var i = 0, len = selObjs.length; i < len; i++){
   selObjs[i].opacity = 100;
 }
})();
function getCYMKColor(c, m, y, k) {
 var tmpColor = new CMYKColor();
 tmpColor.cyan = c;
 tmpColor.magenta = m;
 tmpColor.yellow = y;
 tmpColor.black = k;
 return tmpColor;
}
function getRGBColor(r, g, b) {
 var tmpColor = new RGBColor();
 tmpColor.red = r;
 tmpColor.green = g;
 tmpColor.blue = b;
 return tmpColor;
}

定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5