イラストレーターで使われている色とフォントの一覧を抽出するjsx
AIに任せたらかんたんだった、JSX関係独自のルールとかだるいのでこのあたりは便利
(function() {
if (app.documents.length === 0) {
alert("ドキュメントが開かれていません。");
return;
}
var doc = app.activeDocument;
var output = [];
output.push("// ========================================");
output.push("// Generated from Illustrator: " + doc.name);
output.push("// Date: " + new Date().toLocaleString());
output.push("// ========================================\n");
// --- 補助関数 (16進数変換) ---
function toHex(n) {
var hex = Math.max(0, Math.min(255, Math.round(n))).toString(16);
return hex.length === 1 ? "0" + hex : hex;
}
function cmykToHex(c, m, y, k) {
var r = 255 * (1 - c/100) * (1 - k/100);
var g = 255 * (1 - m/100) * (1 - k/100);
var b = 255 * (1 - y/100) * (1 - k/100);
return "#" + toHex(r) + toHex(g) + toHex(b);
}
// --- 1. カラー抽出セクション ---
output.push("// COLORS");
var swatches = doc.swatches;
var colorCounts = {};
for (var i = 0; i < swatches.length; i++) {
var sw = swatches[i];
if (sw.name.indexOf("[") !== -1) continue;
var hexVal = "";
var baseLabel = "color";
try {
var color = sw.color;
if (color.typename === "RGBColor") {
hexVal = "#" + toHex(color.red) + toHex(color.green) + toHex(color.blue);
if (color.red > color.green && color.red > color.blue) baseLabel = "red";
else if (color.green > color.red && color.green > color.blue) baseLabel = "green";
else if (color.blue > color.red && color.blue > color.green) baseLabel = "blue";
else if (color.red === color.green && color.red === color.blue) baseLabel = "gray";
}
else if (color.typename === "CMYKColor") {
hexVal = cmykToHex(color.cyan, color.magenta, color.yellow, color.black);
var c = color.cyan, m = color.magenta, y = color.yellow, k = color.black;
if (k > 50) baseLabel = "black";
else if (c > m && c > y) baseLabel = "cyan";
else if (m > c && m > y) baseLabel = "magenta";
else if (y > c && y > m) baseLabel = "yellow";
}
if (hexVal !== "") {
if (!colorCounts[baseLabel]) colorCounts[baseLabel] = 0;
colorCounts[baseLabel]++;
output.push("$" + baseLabel + "-" + colorCounts[baseLabel] + ": " + hexVal);
}
} catch (e) {}
}
// --- 2. フォント抽出セクション ---
output.push("\n// FONTS");
var textFrames = doc.textFrames;
var fontMap = {};
var fontIndex = 1;
for (var j = 0; j < textFrames.length; j++) {
try {
var ranges = textFrames[j].textRanges;
for (var k = 0; k < ranges.length; k++) {
var fontName = ranges[k].characterAttributes.textFont.name;
if (!fontMap[fontName]) {
fontMap[fontName] = true;
var varName = fontName.replace(/[\s\.]+/g, "-").toLowerCase();
output.push("$font-family-" + fontIndex + ": \"" + fontName + "\" // " + varName);
fontIndex++;
}
}
} catch (e) {}
}
// --- 3. ファイル出力 ---
var file = new File(Folder.desktop + "/_style-variables.sass");
file.encoding = "UTF-8";
file.open("w");
file.write(output.join("\n"));
file.close();
alert("デスクトップに '_style-variables.sass' を出力しました。");
})();

