80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
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);
|