Pourquoi les Cartes « En Écoute » Ressortent Grises
Une carte « en écoute », ce sont deux décisions de couleur et un peu de mise en page. Les deux décisions sont d’ordinaire prises par une seule ligne de code, et les deux sont fausses d’une manière qui se mesure en une seconde chacune.
La première ligne tire le fond de la moyenne de la pochette. La seconde écrit le texte en blanc. Voici ce que chacune fait réellement.
La moyenne d’une image est une couleur que l’image ne contient pas
Prenez six bandes égales de teintes pleinement saturées — rouge, jaune, vert,
cyan, bleu, magenta — et moyennez chaque pixel. La réponse est
rgb(128, 128, 128). Saturation 0,0. Du gris exact, à
partir d’une image qui ne contient de gris nulle part.
Ce n’est pas la bizarrerie d’une seule image fabriquée. Nous en avons mesuré trois :
| Pochette | Moyenne | Saturation | Présente ? |
|---|---|---|---|
| Six teintes saturées | 128, 128, 128 | 0,0 % | Non |
| Moitié rouge, moitié bleu | 128, 0, 128 | 100 % | Non |
| Vert sur presque noir | 27, 103, 52 | 58,5 % | Non |
Dans les trois cas, la couleur moyenne était absente de la pochette. Moitié rouge sur moitié bleu donne du violet ; il n’y a pas de violet dans l’image. Vert sur presque noir donne un vert plus sombre et plus terne que le vert qui s’y trouve.
Et le motif derrière tout cela est ce qui compte : plus la pochette est colorée, plus sa moyenne est grise, parce que les teintes opposées s’annulent. Une pochette franche reçoit une carte terne. Une pochette monochrome en reçoit une fidèle. C’est exactement l’inverse de ce que veut quiconque, et c’est pourquoi tant de ces cartes ressemblent au même rectangle délavé quoi qu’on leur donne.
Que choisir à la place
Le correctif consiste à choisir une couleur réellement présente dans l’image. Quantifiez la pochette en seaux — seize niveaux par canal suffisent largement —, comptez les pixels de chacun et prenez-en un peuplé, pondéré vers la saturation pour que le blanc du papier et le noir de l’ombre ne l’emportent pas par simple surface.
Sur la pochette à six teintes, cela renvoie un rouge que l’image contient vraiment. Sur une vraie pochette, cela renvoie la couleur que vous auriez désignée du doigt. La différence est un passage sur une vignette de 96 × 96, qui ne coûte rien.
Le texte blanc échoue sur près de deux tiers des couleurs
Passons à la seconde ligne. Quelle que soit la couleur sortie de la première étape, le texte s’y pose en blanc.
Nous avons échantillonné 636 056 couleurs du cube sRGB et calculé le rapport de contraste WCAG de chacune contre le blanc et contre le noir. 4,5:1 est le seuil du texte courant :
| Couleur du texte | Passe 4,5:1 | Passe 3,0:1 |
|---|---|---|
| Toujours blanc | 36,4 % | 56,9 % |
| Toujours noir | 65,3 % | — |
Une carte qui écrit toujours en blanc passe sous le seuil de lisibilité sur 63,6 % des couleurs sur lesquelles elle peut tomber. Pas illisible de façon spectaculaire — c’est lisible sur votre propre écran, en grand, quand vous savez déjà ce qui est écrit. Cela cesse de l’être sur le téléphone de quelqu’un d’autre, en plein jour, en taille de vignette, c’est-à-dire au seul endroit où cela sera réellement vu.
Celle-là, vous n’avez jamais à la perdre
Voici la partie qui vaut d’être connue, et elle est plus forte qu’une heuristique.
Nous avons parcouru les 16 777 216 couleurs sRGB — l’espace
entier, pas un échantillon — et retenu, pour chaque couleur, le meilleur de son
contraste contre le blanc et contre le noir. Le pire cas de tout le cube est
4,58:1, à rgb(207, 13, 204).
4,58 est au-dessus de 4,5. Il n’existe aucune couleur de fond sur laquelle le blanc et le noir échouent tous les deux au seuil. Choisir entre eux couleur par couleur n’est pas une règle empirique qui marche souvent ; c’est lisible par construction, partout, et cela coûte une comparaison :
function pickText(bg) {
return contrast(bg, WHITE) >= contrast(bg, BLACK) ? WHITE : BLACK;
}
Le chiffre mesuré n’est pas non plus un artefact du parcours. Il correspond exactement à la forme close. Le contraste contre le blanc baisse à mesure que le fond s’éclaircit et le contraste contre le noir monte, si bien que le pire cas se situe au croisement des deux courbes — à la luminance relative √(1,05 × 0,05) − 0,05 = 0,1791, ce qui donne 1,05 / 0,2291 = 4,5826. Le parcours exhaustif et l’algèbre s’accordent à quatre décimales.
La troisième petite chose
Tant qu’on y est : les titres de morceaux sont longs, et la plupart des
générateurs les laissent déborder du bord de la carte ou rétrécissent la police
jusqu’à ce que la ligne de l’artiste ait l’air d’un autre design. Un canvas sait
mesurer du texte — ctx.measureText(s).width — donc le comportement
honnête consiste à mesurer, tronquer par des points de suspension à la largeur
disponible, et laisser le corps tranquille. Cela fait trois lignes et personne ne le
fait.
Que faire quand vous en fabriquez une
- Tirez la couleur de la carte de la pochette, pas d’une moyenne de celle-ci. La moyenne est en général une couleur que la pochette ne contient pas, et plus la pochette est colorée, plus elle devient grise.
- Choisissez la couleur du texte par contraste, pas par habitude. Elle ne peut pas échouer : le pire cas sur tout l’espace colorimétrique est 4,58:1.
- Regardez le nombre, pas votre œil. Vous savez déjà ce que dit le titre, ce qui fait de vous le pire juge possible de sa lisibilité.
- Mesurez les titres longs et tronquez-les, au lieu de les laisser dépasser du bord ou de rétrécir la typographie.
Essayez
Notre générateur de carte en écoute fait tout ce qui précède et vous montre la seconde carte à côté de la vôtre — couleur moyenne, texte blanc, à la manière habituelle — pour que la différence se voie plutôt que de s’affirmer. Il indique le rapport de contraste obtenu et celui qu’aurait donné le texte blanc. Tout se passe dans votre navigateur ; la pochette n’est jamais envoyée.
Si la pochette n’est pas encore carrée, le redimensionneur d’images s’en charge d’abord, et le vérificateur de zone sûre montre ce que l’interface d’une story recouvrira une fois la carte publiée.
Questions fréquentes
Pourquoi moyenner une pochette donne-t-il du gris ?
Parce que les teintes opposées s’annulent. Le rouge et le cyan moyennent en gris, tout comme le jaune et le bleu ; une pochette offrant un éventail de couleurs saturées moyenne vers le centre du cube. Six bandes égales de teintes saturées ont donné exactement rgb(128, 128, 128), saturation 0,0.
4,5:1 est-il un vrai seuil ou une recommandation ?
C’est le seuil WCAG AA pour du texte de taille normale, et c’est une recommandation au sens où rien ne l’impose sur une publication sociale. C’est aussi le point sous lequel le texte coûte mesurablement de l’effort de lecture — à davantage de gens, et davantage d’effort, plus on descend.
Choisir entre blanc et noir n’échoue vraiment jamais ?
Nulle part dans sRGB. Nous avons parcouru les 16 777 216 couleurs et le pire cas pour le meilleur des deux est 4,5826:1, ce qui correspond à la forme close : les courbes se croisent à la luminance sqrt(1,05 x 0,05) - 0,05 = 0,1791. Au-dessus de 4,5, partout.
Et du texte coloré plutôt que blanc ou noir ?
Cela peut être plus joli et c’est plus difficile à garantir — une couleur de texte teintée doit être vérifiée contre le fond de la même façon, et la plupart des teintes vers lesquelles on se tourne restent proches du fond dont elles sont issues. Le noir et le blanc sont les deux couleurs dont on peut démontrer le pire cas.
Pourquoi quantifier plutôt que prendre la couleur de pixel la plus fréquente ?
Parce que les photographies et les pochettes imprimées répètent rarement un triplet RVB exact assez souvent pour qu’une valeur unique veuille dire quelque chose. Quantifier à seize niveaux par canal regroupe les pixels quasi identiques pour que le comptage ait un sens, et la pondération par saturation empêche le blanc du papier ou le noir de l’ombre de l’emporter par la seule surface.