/** * Script pour générer les icônes PWA à partir du logo * * Usage: node scripts/generate-icons.js * * Nécessite: npm install --save-dev sharp */ const fs = require('fs') const path = require('path') // Tailles d'icônes requises pour PWA const iconSizes = [72, 96, 128, 144, 152, 192, 384, 512] async function generateIcons() { try { // Vérifier si sharp est installé let sharp try { sharp = require('sharp') } catch (e) { console.error('❌ Le package "sharp" n\'est pas installé.') console.log('📦 Installez-le avec: npm install --save-dev sharp') process.exit(1) } const logoPath = path.join(__dirname, '../public/logo_lediscord.png') const publicDir = path.join(__dirname, '../public') // Vérifier que le logo existe if (!fs.existsSync(logoPath)) { console.error(`❌ Logo introuvable: ${logoPath}`) process.exit(1) } console.log('🎨 Génération des icônes PWA avec fond transparent...') // Générer chaque taille d'icône for (const size of iconSizes) { const outputPath = path.join(publicDir, `icon-${size}x${size}.png`) // Calculer le padding (10% de la taille) pour éviter que le logo touche les bords const padding = Math.floor(size * 0.1) const contentSize = size - (padding * 2) await sharp(logoPath) .resize(contentSize, contentSize, { fit: 'contain', background: { r: 0, g: 0, b: 0, alpha: 0 } // Fond transparent }) .extend({ top: padding, bottom: padding, left: padding, right: padding, background: { r: 0, g: 0, b: 0, alpha: 0 } // Fond transparent }) .resize(size, size, { kernel: sharp.kernel.lanczos3 // Meilleure qualité de redimensionnement }) .png({ quality: 100, compressionLevel: 9 }) .toFile(outputPath) console.log(`✅ Généré: icon-${size}x${size}.png`) } console.log('✨ Toutes les icônes ont été générées avec succès!') console.log('💡 Les icônes utilisent un fond transparent avec un padding intelligent.') } catch (error) { console.error('❌ Erreur lors de la génération des icônes:', error) process.exit(1) } } generateIcons()