Files
convertisseur-images/docs/superpowers/specs/2026-05-27-convertisseur-images-shopify-design.md
T

6.2 KiB
Raw Blame History

Design — Convertisseur Images Shopify

Date : 2026-05-27
Statut : Approuvé
Projet : Matériaux Destock — Outil de conversion et détourage photos produits


Contexte

Les photos de produits sont prises en entrepôt sur fond blanc. Elles sont au format HEIC (iPhone) et doivent être converties en JPG avec un fond blanc pur et uniforme avant d'être uploadées sur Shopify. Les fichiers sont nommés selon le numéro de produit (ex: 12345.heic).


Objectif

Une application web client-side (aucun serveur requis) permettant de :

  1. Importer des fichiers HEIC (1050 à la fois)
  2. Les convertir en JPG
  3. Supprimer/uniformiser le fond blanc automatiquement
  4. Permettre une sélection manuelle de fond par pipette pour les cas complexes (pots de peinture)
  5. Prévisualiser le résultat avant/après pour chaque image
  6. Télécharger toutes les images traitées en ZIP

Interface utilisateur

Layout — Page unique, 3 zones

Zone 1 — Upload

  • Zone de drag & drop acceptant les fichiers .heic
  • Bouton "Parcourir" en fallback
  • Indicateur du nombre de fichiers sélectionnés
  • Curseur de tolérance global (valeur par défaut : 30, plage : 1080)

Zone 2 — Grille de traitement

  • Une carte par image avec :
    • Miniature "Avant" (original converti en JPG)
    • Miniature "Après" (fond supprimé)
    • Nom du fichier (numéro de produit)
    • Statut : En cours / OK / ⚠️ À vérifier
    • Bouton 🎨 Pipette — pour sélectionner manuellement la couleur de fond
    • Curseur de tolérance individuel (hérite du global, ajustable par image)
    • Bouton 🔄 Retraiter — relance l'algorithme avec les nouveaux paramètres

Zone 3 — Export

  • Bouton "⬇️ Télécharger tout en ZIP" (actif dès qu'au moins une image est traitée)
  • Compteur : "X/Y images prêtes"

Flux utilisateur

  1. L'utilisateur dépose ses fichiers HEIC
  2. Chaque fichier est converti en JPG (en mémoire)
  3. L'algorithme de suppression de fond tourne automatiquement sur chaque image
  4. L'utilisateur inspecte les avant/après dans la grille
  5. Sur les images insatisfaisantes : clic sur 🎨 Pipette → clic sur le fond dans l'original → retraitement automatique
  6. Clic sur "Télécharger tout en ZIP" → fichiers .jpg avec nommage d'origine

Algorithme de suppression de fond

Suppression automatique (fond blanc)

  1. Flood-fill depuis les 4 coins de l'image (pixels [0,0], [w-1,0], [0,h-1], [w-1,h-1])
  2. Critère d'appartenance au fond : distance de Chebyshev entre le pixel courant et la couleur de départ ≤ tolérance — soit max(|R1-R2|, |G1-G2|, |B1-B2|) ≤ tolérance
  3. Propagation en 4-connexité (haut, bas, gauche, droite)
  4. Remplacement des pixels identifiés comme fond par blanc pur (R:255, G:255, B:255)
  5. Anti-aliasing : léger fondu gaussien sur les pixels de bordure (12px) pour éviter les contours crénelés

Sélection manuelle par pipette

  • L'utilisateur clique sur le bouton 🎨 d'une image
  • Chrome/Edge : utilisation de l'API window.EyeDropper — le curseur devient une pipette, l'utilisateur clique n'importe où sur l'image originale
  • Safari/Firefox (fallback) : clic direct sur le canvas de l'image originale — la couleur du pixel cliqué est capturée
  • La couleur sélectionnée remplace le point de départ du flood-fill
  • Le retraitement est lancé automatiquement

Paramètre de tolérance

  • Plage : 10 (strict, pour fonds très homogènes) à 80 (permissif, pour fonds légèrement texturés)
  • Valeur par défaut : 30 (adapté aux photos d'entrepôt sur fond blanc)
  • Configurable globalement et par image

Stack technique

Rôle Technologie
Conversion HEIC → JPG heic2any (CDN)
Manipulation d'image Canvas API natif (navigateur)
Interface réactive Alpine.js (CDN, ~15kb)
Style Tailwind CSS (CDN)
Export ZIP JSZip (CDN)
Pipette couleur EyeDropper API + fallback canvas

Aucune dépendance serveur. L'application tourne entièrement dans le navigateur. Les images ne quittent jamais la machine de l'utilisateur.

Concurrence de traitement : les images sont traitées 3 par 3 simultanément (via Promise.all par lots) pour éviter de bloquer le fil principal du navigateur tout en maximisant la vitesse sur un lot de 50 fichiers.


Structure des fichiers

convertisseur-images/
├── index.html              ← Application complète (point d'entrée unique)
├── js/
│   ├── heicConverter.js    ← Conversion HEIC → JPG via heic2any
│   ├── bgRemover.js        ← Flood-fill, pipette, anti-aliasing
│   ├── imageProcessor.js   ← Orchestration du pipeline de traitement
│   └── zipExporter.js      ← Packaging ZIP via JSZip
└── css/
    └── app.css             ← Styles complémentaires à Tailwind

Nommage des fichiers de sortie

  • Le nom d'origine est conservé intégralement
  • Seule l'extension change : .heic.jpg
  • Exemples : 12345.heic12345.jpg, REF-ABC.heicREF-ABC.jpg

Qualité de sortie

  • Format : JPEG
  • Qualité : 92% (équilibre optimal taille/qualité pour Shopify)
  • Dimensions : conservées à l'identique (pas de redimensionnement)

Compatibilité navigateurs

Navigateur Support Notes
Chrome 95+ Complet EyeDropper API disponible
Edge 95+ Complet EyeDropper API disponible
Safari ⚠️ Partiel Fallback canvas pour la pipette
Firefox ⚠️ Partiel Fallback canvas pour la pipette

Recommandation utilisateur : utiliser Chrome ou Edge pour l'expérience complète.


Gestion des erreurs

  • Fichier non-HEIC : ignoré avec message "Format non supporté"
  • Image trop grande (> 50MB) : avertissement, traitement quand même tenté
  • Flood-fill sans résultat : l'image est marquée ⚠️ avec suggestion d'utiliser la pipette
  • Erreur heic2any : carte marquée avec message d'erreur lisible

Hors périmètre (YAGNI)

  • Redimensionnement des images
  • Upload direct vers Shopify
  • Historique des sessions
  • Compte utilisateur / sauvegarde cloud
  • Traitement par IA (remove.bg, etc.)