24/12
This commit is contained in:
Executable
+88
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script pour redimensionner les sprites user2 de 25%
|
||||
* 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 USER2_DIR = path.join(__dirname, 'public/assets/sprites/user2');
|
||||
const BACKUP_DIR = path.join(__dirname, 'public/assets/sprites/user2_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(USER2_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(USER2_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();
|
||||
Reference in New Issue
Block a user