| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- const sharp = require('sharp');
- const path = require('path');
- const fs = require('fs');
- const svgPath = path.resolve(__dirname, '../client/public/favicon.svg');
- const iconsDir = path.resolve(__dirname, '../client/public/icons');
- // Standard icon sizes for web/electron apps
- const iconSizes = [16, 24, 32, 48, 64, 128, 256, 512];
- // Tray icon sizes (simpler variant needed at 16 and 32)
- const traySizes = [
- { name: 'tray-icon.png', size: 16 },
- { name: 'tray-icon@2x.png', size: 32 },
- ];
- // Logo (512px)
- const logoSize = { name: 'logo.png', size: 512 };
- async function generate() {
- if (!fs.existsSync(svgPath)) {
- console.error(`SVG not found: ${svgPath}`);
- process.exit(1);
- }
- fs.mkdirSync(iconsDir, { recursive: true });
- const svgBuffer = fs.readFileSync(svgPath);
- // Generate standard icon sizes
- for (const size of iconSizes) {
- const outPath = path.join(iconsDir, `icon-${size}.png`);
- await sharp(svgBuffer)
- .resize(size, size)
- .png()
- .toFile(outPath);
- console.log(` ✓ icon-${size}.png (${size}x${size})`);
- }
- // Generate tray icons (smaller, may need simplification - use same source)
- for (const { name, size } of traySizes) {
- const outPath = path.join(iconsDir, name);
- await sharp(svgBuffer)
- .resize(size, size)
- .png()
- .toFile(outPath);
- console.log(` ✓ ${name} (${size}x${size})`);
- }
- // Generate logo
- const logoPath = path.join(iconsDir, logoSize.name);
- await sharp(svgBuffer)
- .resize(logoSize.size, logoSize.size)
- .png()
- .toFile(logoPath);
- console.log(` ✓ ${logoSize.name} (${logoSize.size}x${logoSize.size})`);
- console.log(`\nDone! All icons generated in ${iconsDir}`);
- }
- generate().catch(err => {
- console.error('Failed:', err);
- process.exit(1);
- });
|