Rien de bien compliqué :
- On récupère la taille de l'image
- On ouvre l'image
- On fait une boucle sur les Y et les X
- A chaque pixel X:Y on récupère son index
- On créé un div à la position X;Y et on lui applique un background-color en ayant convertit l'index en RGB
- Et voila :)
Je pense que des optimisations sont possibles (eh oui, même sur un petit morceaux de code comme celui la !) :
- Il suffirait de stocker tous les index et leurs positions dans un tableau. Ensuite il faudrait regarder si il y a des mêmes index consécutifs pour ainsi créer un seul div - avec une taille plus grande - au lieu de plusieurs, on allège ainsi la taille du rendu html.
- Ou encore, faire une liste des différentes couleurs, leurs créer une classe css, et appliquer cette class sur les div (à condition que le nom des classes ne dépassent pas 2-3 caractères et que l'image ne contienne pas beaucoup de couleur)
Ci-joint un exemple généré avec le script et l'image originale utilisée, la page pèse plus de 2.5Mo alors que l'image fait 20.8Ko... Je n'ai jamais dit que le script avait une réel utilité !