Mode fond vert : choix du fond apres la photo

- Apres la capture, si chroma key active, une barre de fonds
  s'affiche avec des miniatures cliquables
- L'utilisateur choisit son fond parmi la liste
- Remplacement du fond vert en temps reel (OpenCV backend)
- Onglet "Fonds verts" dans le backoffice pour importer/supprimer
  des images de fond
- Miniatures visuelles dans l'admin et sur l'ecran de preview

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-21 23:45:45 +01:00
parent c10812b4c0
commit 32392d3ccd
6 changed files with 221 additions and 4 deletions

View File

@@ -22,6 +22,7 @@ async function chargerAdmin() {
chargerAnimations();
chargerFonctionnalites();
chargerEmailAdmin();
chargerFondsAdmin();
chargerGalerieAdmin();
}
@@ -262,6 +263,55 @@ async function uploaderCadre() {
afficherStatut('Cadre importe', 'succes');
}
// === FONDS VERTS ===
async function chargerFondsAdmin() {
const fonds = await apiGet('/api/fonds');
const liste = document.getElementById('liste-fonds');
liste.innerHTML = '';
if (fonds.length === 0) {
liste.innerHTML = '<p class="texte-secondaire">Aucun fond importe</p>';
return;
}
for (const nom of fonds) {
const div = document.createElement('div');
div.className = 'fond-item';
const img = document.createElement('img');
img.src = `/assets/backgrounds/${nom}`;
img.alt = nom;
const btnSuppr = document.createElement('button');
btnSuppr.className = 'btn-supprimer';
btnSuppr.innerHTML = '&#10005;';
btnSuppr.onclick = () => supprimerFond(nom);
div.appendChild(img);
div.appendChild(btnSuppr);
liste.appendChild(div);
}
}
async function uploaderFond() {
const input = document.getElementById('input-fond');
if (!input.files.length) return;
const formData = new FormData();
formData.append('fichier', input.files[0]);
await fetch('/api/upload/fond', { method: 'POST', body: formData });
input.value = '';
chargerFondsAdmin();
afficherStatut('Fond importe', 'succes');
}
async function supprimerFond(nom) {
if (!confirm(`Supprimer le fond "${nom}" ?`)) return;
await fetch(`/api/fonds/${encodeURIComponent(nom)}`, { method: 'DELETE' });
chargerFondsAdmin();
}
// === ANIMATIONS ===
const EMOJI_MAP = { 3: '🤪', 2: '😱', 1: '🔥' };