/** * SVG -> PNG 批量转换 (resvg, 支持中文系统字体) * * npm install # 首次安装依赖 * node tools/svg2png.js # 转换 docs/assets 下全部 svg * node tools/svg2png.js foo.svg # 只转换指定文件 */ const fs = require("fs"); const path = require("path"); let Resvg; try { ({ Resvg } = require("@resvg/resvg-js")); } catch (e) { console.error("缺少依赖 @resvg/resvg-js,请先执行: npm install"); process.exit(1); } const dir = path.join(__dirname, "..", "docs", "assets"); const args = process.argv.slice(2); const files = args.length ? args : fs.readdirSync(dir).filter((f) => f.toLowerCase().endsWith(".svg")); let ok = 0; for (const f of files) { const src = path.join(dir, f); const dst = src.replace(/\.svg$/i, ".png"); const svg = fs.readFileSync(src, "utf8"); const r = new Resvg(svg, { fitTo: { mode: "zoom", value: 2 }, font: { loadSystemFonts: true }, background: "#0d1117", }); fs.writeFileSync(dst, r.render().asPng()); console.log(` ${f} -> ${path.basename(dst)}`); ok++; } console.log(`converted ${ok} file(s)`);