2025-03-09

CMYK増減チャート作成スクリプト/Illustrator



カラーチャートを作成することが多いので、選択したオブジェクトの色を基準として、1色だけが1から100まで変化するカラーチャートを作成してくれるスクリプトをChatGPTちゃんにお手伝いしてもらいながら作成しました

1色だけではなく、全部の色が変化するカラーチャートを作成をしたいときは、「カラーチャート作成スクリプト/Illustrator」の記事を参考にして下さい。



素人が作ったものなので、使ってみて何か問題が起こっても責任は取れません。

動作の正確性や安全性についても保証はできないので、使うのはあくまで自己責任でお願いします。

【使い方】


カラーモードをCMYKにし、基準にしたい色を塗ったオブジェクトを選択して、「CMYK増減チャート_v1.1.jsx」スクリプトを起動する。

※アートボードの左上に作成するので、基準のオブジェクトは左上を避けて作成してください。被ります。







例)Cyan基準、増加値1




【ダウンロード】 


Googleドライブです。右上のダウンロードボタンからDLしてください。

https://drive.google.com/file/d/1V3qVaxPGeEhSQQqapk8foXquTG4Zi1WH/view?usp=sharing

右上にこんな感じのボタンがあります。



オブジェクトを選択した状態で、ダウンロードしたスクリプトをドラッグ&ドロップしても使えます。

コードはこんな感じ。
/*
===============================================================
カラーモードがCMYKじゃないと動きません。

基準にしたい色を「塗り」に設定して、選択してからスクリプトを実行してください。
===============================================================
*/

// ダイアログボックスの作成
var dialog = new Window("dialog", "カラーチャート設定");
dialog.orientation = "column";
dialog.alignChildren = "left";

// ラジオボタンのグループを作成
var radioGroup = dialog.add("panel", undefined, "変更する色成分");
radioGroup.orientation = "column";
radioGroup.alignChildren = "left";
radioGroup.margins = 10;

// 各色のラジオボタンを作成
var cyanRadio = radioGroup.add("radiobutton", undefined, "Cyan");
var magentaRadio = radioGroup.add("radiobutton", undefined, "Magenta");
var yellowRadio = radioGroup.add("radiobutton", undefined, "Yellow");
var blackRadio = radioGroup.add("radiobutton", undefined, "Black");

// 増加値の入力フィールドを追加
var incrementGroup = dialog.add("group");
incrementGroup.orientation = "row";
incrementGroup.alignChildren = "left";
incrementGroup.margins = 10;
incrementGroup.add("statictext", undefined, "増加値:");
var incrementInput = incrementGroup.add("edittext", undefined, "1");
incrementInput.characters = 5;
incrementGroup.add("statictext", undefined, "%");

// ボタングループ
var buttonGroup = dialog.add("group");
buttonGroup.orientation = "row";
buttonGroup.alignChildren = "center";
buttonGroup.margins = 10;

// OKボタン
var okButton = buttonGroup.add("button", undefined, "OK");
okButton.onClick = function() {
    dialog.close(1);
}

// キャンセルボタン
var cancelButton = buttonGroup.add("button", undefined, "キャンセル");
cancelButton.onClick = function() {
    dialog.close(2);
}

// ダイアログボックスを表示
if (dialog.show() == 1) {
    // OKがクリックされた場合の処理
    createRectangles();
}

// 長方形を作成する関数
function createRectangles() {
    // 選択された色の取得
    var selectedColor;

    if (cyanRadio.value) {
        selectedColor = "Cyan";
    } else if (magentaRadio.value) {
        selectedColor = "Magenta";
    } else if (yellowRadio.value) {
        selectedColor = "Yellow";
    } else if (blackRadio.value) {
        selectedColor = "Black";
    } else {
        alert("色を選択してください。");
        return;
    }

    // 増加値の取得
    var increment = parseInt(incrementInput.text);
    if (isNaN(increment) || increment <= 0 || increment > 100) {
        alert("増加値は1から100の間の整数を入力してください。");
        return;
    }

    // 選択された色に基づいて長方形の色を変更
    var selectedObjects = app.activeDocument.selection;

    if (selectedObjects.length !== 1 || selectedObjects[0].fillColor.typename !== "CMYKColor") {
        alert("作りたい色をCMYKで塗りにし、選択してから起動してください");
    } else {
        var baseColor = selectedObjects[0].fillColor;
        var documentWidth = 297; // ドキュメントの幅
        var documentHeight = 420; // ドキュメントの高さ
        var mmToPt = 2.83465; // ミリからポイントへの変換率
        var rectangleSize = 20; // 長方形の一辺の長さ(ミリメートル)
        var rectanglesPerRow = 10; // 一行に並べる長方形の数
        var verticalSpacing = 2; // 長方形間の上下の間隔(ポイント)

        var initialY = 0; // 初期位置(Y座標)
        var initialX = 0; // 初期位置(X座標)

        for (var value = 0; value <= 100; value += increment) {
            var color = new CMYKColor();

            if (selectedColor === "Cyan") {
                color.cyan = value;
                color.magenta = baseColor.magenta;
                color.yellow = baseColor.yellow;
                color.black = baseColor.black;
            } else if (selectedColor === "Magenta") {
                color.cyan = baseColor.cyan;
                color.magenta = value;
                color.yellow = baseColor.yellow;
                color.black = baseColor.black;
            } else if (selectedColor === "Yellow") {
                color.cyan = baseColor.cyan;
                color.magenta = baseColor.magenta;
                color.yellow = value;
                color.black = baseColor.black;
            } else if (selectedColor === "Black") {
                color.cyan = baseColor.cyan;
                color.magenta = baseColor.magenta;
                color.yellow = baseColor.yellow;
                color.black = value;
            }

            // 長方形を作成し、塗りつぶし色を設定
            var rectangle = app.activeDocument.pathItems.rectangle(initialY, initialX, rectangleSize * mmToPt, rectangleSize * mmToPt);
            rectangle.fillColor = color;

            // 数字のテキストフレームを作成
            var textFrame = app.activeDocument.textFrames.add();
            textFrame.contents = value;
            textFrame.top = initialY - 15;
            textFrame.left = initialX + (rectangleSize * mmToPt - textFrame.width) / 2;

            // テキストの色を設定
            var textColor = (value < 50) ? [0, 0, 0, 100] : [0, 0, 0, 0]; // valueが50以下の場合は黒色、50以上の場合は白色
            var textFillColor = new CMYKColor();
            textFillColor.cyan = textColor[0];
            textFillColor.magenta = textColor[1];
            textFillColor.yellow = textColor[2];
            textFillColor.black = textColor[3];
            textFrame.textRange.characterAttributes.fillColor = textFillColor;

            // 次の長方形の位置を更新
            initialX += (rectangleSize * mmToPt + 2); // 長方形の右に2ポイントの間隔を空ける

            if (initialX >= rectanglesPerRow * (rectangleSize * mmToPt + 2)) {
                // 一行に指定数の長方形を描いたら、次の行へ
                initialX = 0;
                initialY -= rectangleSize * mmToPt + verticalSpacing;
            }
        }
    }
}