getGradientInfo.jsx

/**********************************************************
 
getGradientInfo.jsx
選択したオブジェクトのグラデーション情報を取得し、
アクティブドキュメントのフォルダにCSV形式で保存するスクリプト

**********************************************************/

#target illustrator

if (app.documents.length > 0) {
    var doc = app.activeDocument;
    var selection = doc.selection;

    if (doc.fullName) {
        var docPath = doc.fullName.parent.fsName; // ドキュメントのフォルダ取得
        var csvFile = new File(docPath + "/gradientInfo.csv");

        if (selection.length > 0) {
            var obj = selection[0]; // 最初の選択オブジェクトを対象
            if (obj.filled && obj.fillColor.typename === "GradientColor") {
                var gradient = obj.fillColor.gradient;
                var csvData = [];

                // CSVヘッダーを追加
                csvData.push("rampPoint,midPoint,opacity,red,green,blue");

                for (var i = 0; i < gradient.gradientStops.length; i++) {
                    var stop = gradient.gradientStops[i];
                    csvData.push(
                        stop.rampPoint + "," +
                        stop.midPoint + "," +
                        stop.opacity + "," +
                        stop.color.red + "," +
                        stop.color.green + "," +
                        stop.color.blue
                    );
                }

                // CSVファイルとして保存
                csvFile.encoding = "UTF-8";
                csvFile.open("w");
                csvFile.write(csvData.join("\n"));
                csvFile.close();

                alert("グラデーション情報をCSVファイルに保存しました。\n" + csvFile.fsName);
            } else {
                alert("選択オブジェクトにグラデーションが適用されていません。");
            }
        } else {
            alert("オブジェクトが選択されていません。");
        }
    } else {
        alert("このドキュメントは保存されていません。先に保存してください。");
    }
} else {
    alert("ドキュメントを開いてください。");
}

setGradientInfo.jsx

/**********************************************************
 
setGradientInfo.jsx
アクティブドキュメントのフォルダからCSVを読み込み、
新規スウォッチとして追加するスクリプト

**********************************************************/

#target illustrator

if (app.documents.length > 0) {
    var doc = app.activeDocument;

    if (doc.fullName) {
        var docPath = doc.fullName.parent.fsName; // ドキュメントのフォルダ取得
        var csvFile = new File(docPath + "/gradientInfo.csv");

        if (csvFile.exists) {
            csvFile.open("r");
            var csvContent = csvFile.read();
            csvFile.close();

            var gradientStops = parseCSV(csvContent);

            // 新規グラデーション作成
            var newGradient = doc.gradients.add();
            newGradient.type = GradientType.LINEAR; // CSVにグラデーションタイプは含めていないのでデフォルトはLINEAR

            // 既存のストップを取得(Illustratorはデフォルトで2つのストップを持つ)
            var stopCount = newGradient.gradientStops.length;

            for (var i = 0; i < gradientStops.length; i++) {
                var stop;
                
                if (i < stopCount) {
                    // 既存のストップを利用
                    stop = newGradient.gradientStops[i];
                } else {
                    // 追加のストップを作成
                    stop = newGradient.gradientStops.add();
                }

                // CSVデータからストップ情報を設定
                stop.rampPoint = gradientStops[i].rampPoint;
                stop.midPoint = gradientStops[i].midPoint;
                stop.opacity = gradientStops[i].opacity;

                var color = new RGBColor();
                color.red = gradientStops[i].red;
                color.green = gradientStops[i].green;
                color.blue = gradientStops[i].blue;
                stop.color = color;
            }

            alert("新しいグラデーションがスウォッチに追加されました。");
        } else {
            alert("gradientInfo.csv が見つかりません。\n先に getGradientInfo.jsx を実行してください。");
        }
    } else {
        alert("このドキュメントは保存されていません。先に保存してください。");
    }
} else {
    alert("ドキュメントを開いてください。");
}

/**********************************************************
 
 CSVをパースする関数

**********************************************************/
function parseCSV(csvString) {
    var lines = csvString.split("\n");
    var stops = [];

    for (var i = 1; i < lines.length; i++) { // 1行目はヘッダーなのでスキップ
        var values = lines[i].split(",");
        if (values.length === 6) {
            stops.push({
                rampPoint: parseFloat(values[0]),
                midPoint: parseFloat(values[1]),
                opacity: parseFloat(values[2]),
                red: parseFloat(values[3]),
                green: parseFloat(values[4]),
                blue: parseFloat(values[5])
            });
        }
    }
    return stops;
}

gradientInfo.csv

rampPoint,midPoint,opacity,red,green,blue
0,50,1,255,120,100
50,50,0.75,100,100,255
100,50,0.5,100,255,100