80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
/**
|
|
* 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()
|
|
|