// Vector source for the twelve original zodiac mascots. PNG output works in both H5 and WeChat. // Run with a locally installed sharp, or pass its module path as the first argument. const path = require('node:path') const fs = require('node:fs') const sharp = require(process.argv[2] || 'sharp') const output = path.resolve(__dirname, '../src/assets/zodiac') const face = (fill, extra = '') => `${extra}` const eyes = `` const smile = `` const art = { rat: `${face('#e8e1f4')}${eyes}${smile}`, ox: `${face('#efd6b0')}${eyes}`, tiger: `${face('#ffd17d')}${eyes}${smile}`, rabbit: `${face('#fff4d8')}${eyes}${smile}`, dragon: `${face('#a1e2c3')}${eyes}`, snake: ``, horse: `${face('#dfb18b')}${eyes}`, goat: `${face('#f7e6d0')}${eyes}${smile}`, monkey: `${face('#bd9373')}${eyes}${smile}`, rooster: `${face('#fff1ce')}${eyes}`, dog: `${face('#eed1a9')}${eyes}${smile}`, pig: `${face('#ffd3dc')}${eyes}` } async function main() { fs.mkdirSync(output, { recursive: true }) for (const [name, content] of Object.entries(art)) { const svg = `${content}` await sharp(Buffer.from(svg)).png().toFile(path.join(output, `${name}.png`)) } console.log(`Rendered ${Object.keys(art).length} zodiac icons`) } main().catch((error) => { console.error(error); process.exitCode = 1 })