const fs = require('fs'); const path = require('path'); const { chromium } = require('playwright'); const outDir = path.join('public', 'assets', 'images', 'brand'); fs.mkdirSync(outDir, { recursive: true }); const fullLogoSvg = ` Рыбсток Рыбсток Качество со склада. Стоковые цены. `; const iconMonogramSvg = ` Ры с `; const iconFishSvg = ` `; async function pngFromSvg(page, svg, file, width, height = null) { const targetHeight = height ?? Math.round((width / 650) * 220); await page.setViewportSize({ width, height: targetHeight }); await page.setContent(` ${svg} `); await page.locator('svg').screenshot({ path: file, omitBackground: true }); } async function main() { fs.writeFileSync(path.join(outDir, 'logo-rybstock-source.svg'), fullLogoSvg.trim(), 'utf8'); fs.writeFileSync(path.join(outDir, 'favicon-rybstock-monogram-source.svg'), iconMonogramSvg.trim(), 'utf8'); fs.writeFileSync(path.join(outDir, 'favicon-rybstock-fish-source.svg'), iconFishSvg.trim(), 'utf8'); const edgePath = 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe'; const browser = await chromium.launch(fs.existsSync(edgePath) ? { executablePath: edgePath } : {}); const page = await browser.newPage({ deviceScaleFactor: 1 }); try { for (const width of [320, 640, 1280, 1920]) { await pngFromSvg(page, fullLogoSvg, path.join(outDir, `logo-rybstock-${width}.png`), width); } for (const width of [16, 32, 48, 64, 180, 192, 512]) { await pngFromSvg(page, iconMonogramSvg, path.join(outDir, `favicon-rybstock-monogram-${width}.png`), width, width); await pngFromSvg(page, iconFishSvg, path.join(outDir, `favicon-rybstock-fish-${width}.png`), width, width); } await pngFromSvg(page, iconMonogramSvg, path.join('public', 'favicon-16x16.png'), 16, 16); await pngFromSvg(page, iconMonogramSvg, path.join('public', 'favicon-32x32.png'), 32, 32); await pngFromSvg(page, iconMonogramSvg, path.join('public', 'apple-touch-icon.png'), 180, 180); } finally { await browser.close(); } } main().catch((error) => { console.error(error); process.exit(1); });