#!/usr/bin/env node /** * Script pour redimensionner les sprites user1 à 93x224px (même taille que user2) * Utilise le package sharp pour le traitement d'images */ const fs = require('fs'); const path = require('path'); // Vérifier si sharp est disponible let sharp; try { sharp = require('sharp'); } catch (err) { console.log('❌ Le package "sharp" n\'est pas installé.'); console.log('📦 Installation en cours...'); const { execSync } = require('child_process'); try { execSync('npm install --no-save sharp', { stdio: 'inherit' }); sharp = require('sharp'); console.log('✅ Sharp installé avec succès!\n'); } catch (installErr) { console.error('❌ Impossible d\'installer sharp. Veuillez l\'installer manuellement:'); console.error(' npm install sharp'); process.exit(1); } } const USER1_DIR = path.join(__dirname, 'public/assets/sprites/user1'); const BACKUP_DIR = path.join(__dirname, 'public/assets/sprites/user1_backup'); const TARGET_WIDTH = 93; const TARGET_HEIGHT = 224; async function resizeImages() { try { // Créer un backup if (!fs.existsSync(BACKUP_DIR)) { fs.mkdirSync(BACKUP_DIR, { recursive: true }); console.log('📁 Dossier de backup créé:', BACKUP_DIR); } // Lire tous les fichiers PNG sauf le spritesheet const files = fs.readdirSync(USER1_DIR) .filter(f => f.endsWith('.png') && f !== 'player_spritesheet.png'); console.log(`\n🖼️ Redimensionnement de ${files.length} sprites vers ${TARGET_WIDTH}x${TARGET_HEIGHT}px...\n`); for (const file of files) { const inputPath = path.join(USER1_DIR, file); const backupPath = path.join(BACKUP_DIR, file); // Backup de l'original if (!fs.existsSync(backupPath)) { fs.copyFileSync(inputPath, backupPath); } // Lire les métadonnées de l'image const metadata = await sharp(inputPath).metadata(); console.log(`📏 ${file}`); console.log(` ${metadata.width}x${metadata.height} → ${TARGET_WIDTH}x${TARGET_HEIGHT}`); // Redimensionner avec fit: 'contain' pour préserver le ratio et ajouter fond transparent await sharp(inputPath) .resize(TARGET_WIDTH, TARGET_HEIGHT, { kernel: 'lanczos3', fit: 'contain', background: { r: 0, g: 0, b: 0, alpha: 0 } }) .toFile(inputPath + '.tmp'); // Remplacer l'original fs.renameSync(inputPath + '.tmp', inputPath); console.log(` ✅ Redimensionné\n`); } console.log('✨ Toutes les images ont été redimensionnées avec succès!'); console.log(`💾 Les originaux sont sauvegardés dans: ${BACKUP_DIR}`); } catch (error) { console.error('❌ Erreur:', error.message); process.exit(1); } } // Exécuter resizeImages();