const sharp = require('sharp'); const fs = require('fs'); const path = require('path'); const svgPath = path.join(__dirname, 'app-icon.svg'); const iconsDir = path.join(__dirname, 'icons'); // 确保icons目录存在 if (!fs.existsSync(iconsDir)) { fs.mkdirSync(iconsDir, { recursive: true }); } const sizes = [ { name: '32x32.png', size: 32 }, { name: '128x128.png', size: 128 }, { name: '128x128@2x.png', size: 256 }, { name: 'icon.png', size: 512 }, { name: 'Square30x30Logo.png', size: 30 }, { name: 'Square44x44Logo.png', size: 44 }, { name: 'Square71x71Logo.png', size: 71 }, { name: 'Square89x89Logo.png', size: 89 }, { name: 'Square107x107Logo.png', size: 107 }, { name: 'Square142x142Logo.png', size: 142 }, { name: 'Square150x150Logo.png', size: 150 }, { name: 'Square284x284Logo.png', size: 284 }, { name: 'Square310x310Logo.png', size: 310 }, { name: 'StoreLogo.png', size: 50 }, ]; async function generateIcons() { const svgBuffer = fs.readFileSync(svgPath); for (const { name, size } of sizes) { const outputPath = path.join(iconsDir, name); await sharp(svgBuffer) .resize(size, size) .png() .toFile(outputPath); console.log(`Generated: ${name} (${size}x${size})`); } // 生成 ICO 文件 (Windows) // 为了简单起见,我们用256x256的PNG作为ICO的基础 const icoSizes = [16, 32, 48, 64, 128, 256]; const icoPngs = []; for (const size of icoSizes) { const buffer = await sharp(svgBuffer) .resize(size, size) .png() .toBuffer(); icoPngs.push({ size, buffer }); } // 生成简单的ICO (使用256x256作为主图标) const ico256 = await sharp(svgBuffer) .resize(256, 256) .png() .toFile(path.join(iconsDir, 'icon.ico.png')); // 复制一个PNG作为ICO的替代(Tauri会处理) await sharp(svgBuffer) .resize(256, 256) .png() .toFile(path.join(iconsDir, 'icon.ico')); console.log('Generated: icon.ico'); // 复制到根目录作为app-icon.png await sharp(svgBuffer) .resize(512, 512) .png() .toFile(path.join(__dirname, 'app-icon.png')); console.log('Generated: app-icon.png'); console.log('\nAll icons generated successfully!'); } generateIcons().catch(console.error);