Sur le principe du tableau de pixels...
Ci-dessous le code d'un tableau html de 16 cases sur 16.
On donne ensuite une série d'entiers :
- 7 7 7 464 3032 2542 1984 2040 0 0 49152 57416 16384 0 0 0
- 0 2016 4088 0 0 0 0 0 272 136 248 3508 4092 2044 4064 3840
- 0 0 0 3623 5159 5648 6204 0 16104 32624 16129 515 4099 14339 28672 16384
Le principe d'utilisation de ces entiers est le suivant :
- Traduire chaque entier en binaire sur 16 bits (ajouter des 0 à gauche si nécessaire)
- Et utiliser le résultat pour placer la couleur de l'entier...
Par exemple le second 7 vous permet de placer la couleur jaune orangé (couleur utilisée pour écrire l'entier)
de la seconde ligne du tableau html :
- 7 sécrit en binaire sur 16 bits de la façon suivante : 0000 0000 0000 0111.
- Cela signifie que les cellules 14, 15 et 16 de la ligne 2 du tableau html auront cette couleur jaune-orange.
Bien entendu, ne faîtes pas cela à la main. Un petit script est attendu !
Source
L'idée est issue d'un site présentant des énigmes à ses lecteurs :
prise2tete.
Un code possible :
Sur le principe du tableau de pixels, suite
On dispose maintenant d'un fichier ( à charger ici )
des couleurs
d'une image.
Chaque ligne de ce fichier est le code d'un tableau javascript (type array)
correspondant aux couleurs des pixels composant une ligne d'une image.
L'idée est de créer, comme dans l'exercice précédent, un élément html de type table
qui comportera autant de cellules que l'image ne comporte de pixels, chaque cellule du tableau
ayant une couleur de fond correspondant à la couleur du pixel indiquée dans le fichier.
Si le fichier comportait par exemple comme premier tableau (array) :
[ 'rgb(163,122,90)' , 'rgb(123,80,48)' , 'rgb(147,101,68)' , 'rgb(158,110,74)' ], cela signifierait que l'on aurait une image
de seulement 4 pixels de large (4 pixels par ligne de l'image).
Il nous faudrait donc créer un élément html table dont la première ligne comporterait 4 cellules,
de couleurs de fond respectives : rgb(163,122,90), rgb(123,80,48), rgb(147,101,68), rgb(158,110,74).
Complétez la partie script ci-dessous (sans toucher à la partie html du code) de façon à afficher cette image.
Ce script créera une ligne de l'élément html table pour chaque ligne de l'image et une cellule
td par pixel,
en attribuant la couleur du pixel à la cellule.
Source
L'image originale (image au format jpg) :
Un code possible :
Variante
Copier-coller le fichier de données comme dans le script précédent peut-être pénible (risque d'erreurs en sélectionnant puis collant,
texte du script peu lisible du fait de ces nombreuses lignes de chiffres, travail pénible si l'on doit en faire plusieurs...)
Mais on peut contourner ce problème de la façon suivante :
- on fait une copie du fichier de données, on nomme la copie avec l'extension js. Par exemple "tableCouleurs.js".
- On modifie légèrement cette copie en ajoutant "var couleurs = [" en début de fichier et "]" en fin de fichier.
On aura ainsi défini notre très longue variable de type array dans un fichier séparé (que l'on charge comme indiqué ci-dessous dans la page html),
ce qui allège le code principal.
Pixellisation
Vous pouvez, dans le css des solutions, augmenter le width et le height des cellules (par exemple 3px) :
vous observerez ainsi de
façon assez nette ce que l'on nomme usuellement effet de pixellisation d'une image.