getGradientInfo.jsx
/**********************************************************
getGradientInfo.jsx
選択したオブジェクトのグラデーション情報を取得し、
アクティブドキュメントと同じフォルダにJSON形式で保存
**********************************************************/
#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 jsonFile = new File(docPath + "/gradientInfo.json");
if (selection.length > 0) {
var obj = selection[0]; // 最初の選択オブジェクトを対象
if (obj.filled && obj.fillColor.typename === "GradientColor") {
var gradient = obj.fillColor.gradient;
var gradientData = {
name: gradient.name,
type: gradient.type === GradientType.LINEAR ? "LINEAR" : "RADIAL",
stops: []
};
for (var i = 0; i < gradient.gradientStops.length; i++) {
var stop = gradient.gradientStops[i];
gradientData.stops.push({
rampPoint: stop.rampPoint,
midPoint: stop.midPoint,
opacity: stop.opacity,
color: {
red: stop.color.red,
green: stop.color.green,
blue: stop.color.blue
}
});
}
// JSONの文字列を手動で作成
var jsonStr = stringifyJSON(gradientData);
// JSONファイルとして保存
jsonFile.encoding = "UTF-8";
jsonFile.open("w");
jsonFile.write(jsonStr);
jsonFile.close();
alert("グラデーション情報を保存しました。\n" + jsonFile.fsName);
} else {
alert("選択オブジェクトにグラデーションが適用されていません。");
}
} else {
alert("オブジェクトが選択されていません。");
}
} else {
alert("このドキュメントは保存されていません。先に保存してください。");
}
} else {
alert("ドキュメントを開いてください。");
}
/**********************************************************
JSONオブジェクトの代替 stringify 関数(Illustrator ExtendScript用)
**********************************************************/
function stringifyJSON(obj) {
if (typeof obj !== "object" || obj === null) {
return '"' + obj + '"';
}
var json = [];
var isArray = obj.constructor === Array; // Array.isArray の代替
for (var key in obj) {
if (!obj.hasOwnProperty(key)) continue;
var value = obj[key];
var formattedValue = (typeof value === "object" && value !== null) ? stringifyJSON(value) : '"' + value + '"';
json.push(isArray ? formattedValue : '"' + key + '":' + formattedValue);
}
return (isArray ? "[" : "{") + json.join(",") + (isArray ? "]" : "}");
}
setGradientInfo.jsx
/**********************************************************
setGradientInfo.jsx
アクティブドキュメントのフォルダから JSON を読み込み、
新規スウォッチとして追加するスクリプト
**********************************************************/
#target illustrator
if (app.documents.length > 0) {
var doc = app.activeDocument;
if (doc.fullName) {
var docPath = doc.fullName.parent.fsName; // ドキュメントのフォルダ取得
var jsonFile = new File(docPath + "/gradientInfo.json");
if (jsonFile.exists) {
jsonFile.open("r");
var jsonStr = jsonFile.read();
jsonFile.close();
var gradientData = parseJSON(jsonStr);
// 新規グラデーション作成
var newGradient = doc.gradients.add();
newGradient.type = gradientData.type === "LINEAR" ? GradientType.LINEAR : GradientType.RADIAL;
// 既存のストップを取得(Illustratorはデフォルトで2つのストップを持つ)
var stopCount = newGradient.gradientStops.length;
for (var i = 0; i < gradientData.stops.length; i++) {
var stop;
if (i < stopCount) {
// 既存のストップを利用
stop = newGradient.gradientStops[i];
} else {
// 追加のストップを作成
stop = newGradient.gradientStops.add();
}
// JSON からストップ情報を設定
stop.rampPoint = gradientData.stops[i].rampPoint;
stop.midPoint = gradientData.stops[i].midPoint;
stop.opacity = gradientData.stops[i].opacity;
var color = new RGBColor();
color.red = gradientData.stops[i].color.red;
color.green = gradientData.stops[i].color.green;
color.blue = gradientData.stops[i].color.blue;
stop.color = color;
}
alert("新しいグラデーションがスウォッチに追加されました。");
} else {
alert("gradientInfo.json が見つかりません。\n先に getGradientInfo.jsx を実行してください。");
}
} else {
alert("このドキュメントは保存されていません。先に保存してください。");
}
} else {
alert("ドキュメントを開いてください。");
}
/**********************************************************
JSONオブジェクトの代替 parse 関数(Illustrator ExtendScript用)
**********************************************************/
function parseJSON(jsonString) {
try {
return eval("(" + jsonString + ")");
} catch (e) {
alert("JSONの解析に失敗しました。\n" + e);
return null;
}
}
JSON
{
"name": "名称未設定グラデーション 20",
"type": "LINEAR",
"stops": [
{
"rampPoint": "0",
"midPoint": "50",
"opacity": "100",
"color": {
"red": "255",
"green": "120",
"blue": "100"
}
},
{
"rampPoint": "33",
"midPoint": "85.9147098345072",
"opacity": "100",
"color": {
"red": "100",
"green": "100",
"blue": "255"
}
},
{
"rampPoint": "66",
"midPoint": "17.7047336436106",
"opacity": "100",
"color": {
"red": "100",
"green": "255",
"blue": "100"
}
},
{
"rampPoint": "100",
"midPoint": "50",
"opacity": "100",
"color": {
"red": "255",
"green": "200",
"blue": "0"
}
}
]
}