| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- const fs = require('fs');
- const path = require('path');
- let sharp;
- try {
- sharp = require('sharp');
- } catch (error) {
- console.error('Missing dependency: sharp. Run pnpm install first.');
- process.exit(1);
- }
- const appSvgPath = path.join(__dirname, '../public/favicon.svg');
- const traySvgPath = path.join(__dirname, '../public/tray-icon.svg');
- const iconsDir = path.join(__dirname, '../public/icons');
- const buildDir = path.join(__dirname, '../build');
- const docsDir = path.join(__dirname, '../../docs');
- const iconSizes = [16, 24, 32, 48, 64, 128, 256, 512];
- const trayIcons = [
- { name: 'tray-icon.png', size: 32 },
- { name: 'tray-icon@2x.png', size: 64 },
- ];
- async function renderPng(sourceBuffer, targetPath, size) {
- await sharp(sourceBuffer)
- .resize(size, size, {
- fit: 'contain',
- kernel: sharp.kernel.lanczos3,
- })
- .png({
- compressionLevel: 9,
- adaptiveFiltering: true,
- palette: size <= 64,
- })
- .toFile(targetPath);
- }
- async function generateIcons() {
- if (!fs.existsSync(appSvgPath)) {
- throw new Error(`App icon SVG not found: ${appSvgPath}`);
- }
- if (!fs.existsSync(traySvgPath)) {
- throw new Error(`Tray icon SVG not found: ${traySvgPath}`);
- }
- fs.mkdirSync(iconsDir, { recursive: true });
- fs.mkdirSync(buildDir, { recursive: true });
- fs.mkdirSync(docsDir, { recursive: true });
- const appSvg = fs.readFileSync(appSvgPath);
- const traySvg = fs.readFileSync(traySvgPath);
- for (const size of iconSizes) {
- const target = path.join(iconsDir, `icon-${size}.png`);
- await renderPng(appSvg, target, size);
- console.log(`generated icon-${size}.png`);
- }
- for (const tray of trayIcons) {
- const target = path.join(iconsDir, tray.name);
- await renderPng(traySvg, target, tray.size);
- console.log(`generated ${tray.name}`);
- }
- const logoPath = path.join(iconsDir, 'logo.png');
- await renderPng(appSvg, logoPath, 512);
- fs.copyFileSync(path.join(iconsDir, 'icon-256.png'), path.join(buildDir, 'icon.png'));
- fs.copyFileSync(logoPath, path.join(docsDir, 'logo.png'));
- console.log('icon generation complete');
- }
- generateIcons().catch((error) => {
- console.error(error);
- process.exit(1);
- });
|