getGradientInfo.jsx

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

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

#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,color");

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

                // 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("ドキュメントを開いてください。");
}

/**********************************************************
 
 RGB を Hex コードに変換する関数

**********************************************************/
function rgbToHex(r, g, b) {
    return "#" + toHex(r) + toHex(g) + toHex(b);
}

function toHex(value) {
    var hex = Math.round(value).toString(16);
    return hex.length === 1 ? "0" + hex : hex;
}

setGradientInfo.jsx

/**********************************************************
 
setGradientInfo.jsx
CSVファイルを読み込み、新規スウォッチとして追加するスクリプト。
カラー情報は Hex コードから RGB に変換し、正しくスウォッチに適用する。

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

#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);

            if (gradientStops.length < 2) {
                alert("グラデーションには最低2つのストップが必要です。");
                exit();
            }

            // ** 新規グラデーション作成 **
            var newGradient = createGradient();

            // ** 既存のストップを全て削除(エラーを防ぐ)**
            // while (newGradient.gradientStops.length > 0) {
            //     newGradient.gradientStops[0].remove();
            // }

            // ** ストップを適用 **
            for (var i = 0; i < gradientStops.length; i++) {
                if (newGradient.gradientStops.length <= i) {
                    newGradient.gradientStops.add();
                }
                var stop = newGradient.gradientStops[i];

                stop.rampPoint = gradientStops[i].rampPoint;
                stop.midPoint = gradientStops[i].midPoint;
                stop.opacity = gradientStops[i].opacity;

                var colorRGB = hexToRGB(gradientStops[i].color);
                var newColor = new RGBColor();
                newColor.red = colorRGB.red;
                newColor.green = colorRGB.green;
                newColor.blue = colorRGB.blue;

                stop.color = newColor;
            }

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

/**********************************************************
 
 グラデーションを作成する関数(名前は設定しない)

**********************************************************/
function createGradient() {
    var theGradient = app.activeDocument.gradients.add();
    theGradient.type = GradientType.LINEAR; // リニアグラデーション
    return theGradient;
}

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

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

    for (var i = 1; i < lines.length; i++) {
        var values = lines[i].split(",");
        if (values.length === 4) {
            stops.push({
                rampPoint: parseFloat(values[0]),
                midPoint: parseFloat(values[1]),
                opacity: parseFloat(values[2]),
                color: trimString(values[3])
            });
        }
    }

    return stops;
}

/**********************************************************
 
 文字列の前後の空白を削除する関数

**********************************************************/
function trimString(str) {
    return str.replace(/^\s+|\s+$/g, "");
}

/**********************************************************
 
 Hexカラーコードを RGB に変換する関数

**********************************************************/
function hexToRGB(hex) {
    hex = hex.replace("#", "");
    return {
        red: parseInt(hex.substring(0, 2), 16),
        green: parseInt(hex.substring(2, 4), 16),
        blue: parseInt(hex.substring(4, 6), 16)
    };
}

gradientInfo.csv

rampPoint,midPoint,opacity,color
0,50,100,#3fbff0
21.9414901733398,50,100,#6ee089
49.1489410400391,50,100,#99ff2a
72.7925720214844,50,100,#ff5d15
83.0053176879883,50,100,#ebffaa
100,50,100,#008dd7