Help us understand the problem. What is going on with this article?

デザイン自動化メモ(InDesignのテキストフレームの背景色をグレースケールにする)

More than 1 year has passed since last update.

DTPのカンプチェック時に一部のオブジェクト以外をグレースケールにする。
検版とか機械学習するデータを作るときに使えないかと試作。
InDesignはオブジェクトごとに、やり方が異なります。
とりあえず、テキストフレームの背景色から。

特定の条件を満たすテキストフレームの背景色を変更する

ここでは、グレースケールに変換する対象を、スクリプトラベルが空白、カラー指定がスウォッチの場合に限っています。
グレースケールへの変換は、RGB経由で輝度を出しています。
2018/6/24 輝度からKへの計算でK=100-輝度のところK=輝度と間違えていました。訂正しました。

function main() {

    pageObj = app.activeDocument.pages[0];
    total = pageObj.allPageItems.length;

    for (i=0;i<total;i++) {
       var label = "";
       var typeName = "";
       var pageItem;

       pageItem = pageObj.allPageItems[i];

       var typeName = pageItem.constructor.name;
       label = pageItem.label;

       // テキストフレームのときの背景色を変更する。
       if (typeName=="TextFrame") {

           // 特定のテキストフレームは処理をしない。ここではスクリプトラベルで判断する。
           if (label=="hoge") {

               continue;
           }

            // 設定されている背景色を取得する。
            var col = pageItem.fillColor;
            var cs = col.space;

            // カラーモデルがCMYKなのを確認し、CMYK以外なら処理しない。
            // 実際に使う場合はエラーにします。
            if (cs!=ColorSpace.CMYK) {

                continue;
            }

            var c = col.colorValue[0];
            var m = col.colorValue[1];
            var y = col.colorValue[2];
            var k = col.colorValue[3];

            // InDesignのCMYKは0% - 100%になるので、0-255にスケール変換
            var c255 = c*2.55;
            var m255 = m*2.55;
            var y255 = y*2.55;
            var k255 = k*2.55;

            // なんちゃってRGB
            var r = Math.max(0,255- c255 - k255);
            var g = Math.max(0,255- m255 - k255);
            var b = Math.max(0,255- y255 - k255);

            // 輝度を出す
            var luminance = Math.round(0.2990 * r  + 0.5870 * g + 0.1140 * b);

            // スケールを 0% - 100%に戻す
            var retk = 100 - Math.round(luminance / 2.55);

            alert(retk);

            // スォッチを追加
            var sname = "K" + retk;

               for (i=0;i<app.activeDocument.colors.length;i++) {
                    if (app.activeDocument.colors[i].name==sname) {
                        app.activeDocument.colors[i].remove();
                    }
               }

            colorOption = {colorValue:[0,0,0,retk],model:ColorModel.process,space:ColorSpace.cmyk,name:sname}
            colorObj = app.activeDocument.colors.add(colorOption);            

            // 背景色を反映
            pageItem.fillColor = colorObj;
       }
    }
 }

main();

シアン100%から変換した結果
スクリーンショット 2018-06-24 9.36.20.png

スクリーンショット 2018-06-24 19.30.13.png

マゼンダ100%から変換した結果
スクリーンショット 2018-06-24 9.37.04.png

スクリーンショット 2018-06-24 19.31.38.png

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away