C'est ce que j'allais dire. La plupart des formats (tous?) ne permettent pas d'avoir certains pixels en niveaux de gris, et certains pixels en couleur. Donc avoir une telle image principalement en niveaux de gris avec juste quelques pixels (la grille) en couleur en revient juste à avoir une image entièrement en couleur. Simplement beaucoup de ces couleurs seront "grises", ce qui dans la pratique va le plus souvent signifier que 2 composants sur 3 seront "inutiles". Par exemple si les pixels sont en RGB, chaque composant (rouge, vert et bleu) seront simplement identiques (donc 2/3 de l'info est redondante). En Y'UV, seule la luma sera utile (et beaucoup d'autres modèles de couleurs séparant la luminance, ce sera similaire avec le seul composant luminance utile).
Alors comme dit plus haut, ça doit pouvoir se compresser très bien, mais bon... c'est sûr qu'avec presque 2/3 de données inutiles, idéalement plutôt que compresser cette partie, on aimerait pouvoir s'en débarrasser tout simplement.
Je vois 2 solutions:
Soit un format d'image avec un concept de calques ou d'objets, et dont chaque calque/objet peut avoir un modèle de couleur différent. On aurait donc l'image principale dans un calque/objet en niveaux de gris et la grille par dessus dans un calque/objet en couleur. Ce serait idéal. Malheureusement il n'y a pas tant de formats qui permettent cela, et surtout utilisables pour simplement afficher des images dans un navigateur.
Soit séparer l'image en 2 fichiers d'image: une image en niveaux de gris et une image en couleur (avec la grille seulement) puis les réassembler sur la page web (avec HTML5 canvas et quelques lignes de javascript à peine par exemple; en faisant un fallback sur l'image en niveau de gris seulement en l'absence de JS).
Notons pour cette seconde solution que séparer la grille en format vectoriel, par ex. SVG, (plutôt qu'un quelconque format raster) même serait encore mieux (des lignes droites avec des aplats de couleur, c'est du vectoriel idéal donc taille probablement encore plus faible), laquelle pourrait tout aussi bien être composité sur l'image en niveaux de gris (comme dit plus haut, soit dans un format d'image unique qui est capable de contenir plusieurs types d'images différentes, soit à l'affichage en HTML/JS).
Ensuite clairement la solution 2 images + HTML/JS rajoute de la complexité au système (même si cela pourrait être scripté pour n'avoir qu'à donner une image en couleur, puis des scripts généreraient la version en niveaux de gris, la grille de couleur en vectoriel et le code HTML/CSS automatiquement). Disons que je joue le jeu d'essayer de trouver la solution qui permettrait la plus faible taille de fichiers, mais ce n'est pas forcément la solution la plus simple malheureusement. Et puis faudrait tester pour vérifier l'intuition. Sait-on jamais si vraiment la compression ne fait pas des merveilles, comparée à 2 images avec tout l'overhead que cela implique.
Donc j'imagine très bien que ce ne sera pas la solution choisie. 😉
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]
[^] # Re: Chez moi ça marche
Posté par Jehan (site web personnel, Mastodon) . En réponse au journal Du format et de la taille des images. Évalué à 10. Dernière modification le 31 août 2023 à 09:06.
C'est ce que j'allais dire. La plupart des formats (tous?) ne permettent pas d'avoir certains pixels en niveaux de gris, et certains pixels en couleur. Donc avoir une telle image principalement en niveaux de gris avec juste quelques pixels (la grille) en couleur en revient juste à avoir une image entièrement en couleur. Simplement beaucoup de ces couleurs seront "grises", ce qui dans la pratique va le plus souvent signifier que 2 composants sur 3 seront "inutiles". Par exemple si les pixels sont en RGB, chaque composant (rouge, vert et bleu) seront simplement identiques (donc 2/3 de l'info est redondante). En Y'UV, seule la luma sera utile (et beaucoup d'autres modèles de couleurs séparant la luminance, ce sera similaire avec le seul composant luminance utile).
Alors comme dit plus haut, ça doit pouvoir se compresser très bien, mais bon... c'est sûr qu'avec presque 2/3 de données inutiles, idéalement plutôt que compresser cette partie, on aimerait pouvoir s'en débarrasser tout simplement.
Je vois 2 solutions:
Notons pour cette seconde solution que séparer la grille en format vectoriel, par ex. SVG, (plutôt qu'un quelconque format raster) même serait encore mieux (des lignes droites avec des aplats de couleur, c'est du vectoriel idéal donc taille probablement encore plus faible), laquelle pourrait tout aussi bien être composité sur l'image en niveaux de gris (comme dit plus haut, soit dans un format d'image unique qui est capable de contenir plusieurs types d'images différentes, soit à l'affichage en HTML/JS).
Ensuite clairement la solution 2 images + HTML/JS rajoute de la complexité au système (même si cela pourrait être scripté pour n'avoir qu'à donner une image en couleur, puis des scripts généreraient la version en niveaux de gris, la grille de couleur en vectoriel et le code HTML/CSS automatiquement). Disons que je joue le jeu d'essayer de trouver la solution qui permettrait la plus faible taille de fichiers, mais ce n'est pas forcément la solution la plus simple malheureusement. Et puis faudrait tester pour vérifier l'intuition. Sait-on jamais si vraiment la compression ne fait pas des merveilles, comparée à 2 images avec tout l'overhead que cela implique.
Donc j'imagine très bien que ce ne sera pas la solution choisie. 😉
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]