pensieve/web/scripts/generateStaticLogos.js
2024-10-16 16:25:13 +08:00

56 lines
1.7 KiB
JavaScript

import fs from 'fs';
import path from 'path';
import sharp from 'sharp';
import { fileURLToPath } from 'url';
import { generateMemosLogo } from './logoGenerator.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
async function generatePNGLogo(size, outputFileName) {
let svgContent;
if (size <= 256) {
svgContent = generateMemosLogo(size, false, false);
} else {
svgContent = generateMemosLogo(size, true, true);
}
// 确保 logos 目录存在
const logosDir = path.join(__dirname, '..', 'static', 'logos');
if (!fs.existsSync(logosDir)) {
fs.mkdirSync(logosDir, { recursive: true });
}
const outputPath = path.join(logosDir, outputFileName);
await sharp(Buffer.from(svgContent))
.png()
.toFile(outputPath);
}
// Mac app icon sizes
const iconSizes = [16, 32, 64, 128, 256, 512, 1024];
// Generate logos for each size
(async () => {
for (const size of iconSizes) {
await generatePNGLogo(size, `memos_logo_${size}.png`);
// Generate @2x version for Retina displays
await generatePNGLogo(size * 2, `memos_logo_${size}@2x.png`);
}
console.log('PNG logos generated successfully in the static/logos directory!');
// Copy 128x128 logo to static/favicon.png
const sourceFile = path.join(__dirname, '..', 'static', 'logos', 'memos_logo_128.png');
const destinationFile = path.join(__dirname, '..', 'static', 'favicon.png');
fs.copyFile(sourceFile, destinationFile, (err) => {
if (err) {
console.error('Error copying favicon:', err);
} else {
console.log('Favicon copied successfully to static/favicon.png');
}
});
})();