40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
|
|
/**
|
||
|
|
* 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)`);
|