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