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