Je essaie d'évaluer l'obscurité d'une couleur choisie par un sélecteur de couleur pour voir si elle est "trop noire", et dans ce cas, la fixer à blanc. Je pensais que je pourrais utiliser les premiers caractères de la valeur hexadécimale pour y arriver. Cela fonctionne, mais cela change aussi certaines couleurs légitimement "claires".
J'ai le code suivant:
if (lightcolor.substring(0, 3) == "#00" || lightcolor.substring(0, 3) == "#010") {
lightcolor = "#FFFFFF";
color = lightcolor;
}
Il doit y avoir un moyen plus efficace avec les mathématiques hexadécimales pour savoir qu'une couleur a dépassé un certain niveau d'obscurité ? Comme si lightcolor
+ "une valeur hexadécimale quelconque" <=
"une valeur hexadécimale quelconque" alors la fixer à blanc
.
J'ai ajouté tinyColor
, qui pourrait être utile pour cela, mais je n'en suis pas sûr.
1 votes
Avez-vous essayé de mettre en place un sélecteur de couleurs et de vérifier les valeurs ? J'ai remarqué que lorsque R, G et B sont tous inférieurs à ~70, cela devient sombre. Ce n'est peut-être pas la manière correcte, mais c'en est une.
1 votes
Comme vous utilisez déjà tinyColor, transformez la couleur en HSL et regardez le composant L. 1 = blanc, 0 = noir
4 votes
@Andreas La luminosité HSL ne prend pas en compte la perception humaine. Une valeur L de 0,5 aura une luminosité perçue différente pour différentes teintes.
1 votes
@Alnitak Tu as raison mais la description de la TO n'est pas si précise. Ainsi, toute valeur inférieure à 3/8 aurait pu être suffisamment sombre pour son objectif.
1 votes
@Andreas cela dépend - si vous regardez les valeurs de luminance de l'UIT dans ma réponse, vous verrez que le bleu est perçu comme étant seulement 1/10 aussi lumineux que le vert.