Je veux montrer quelques images comme cet exemple
La couleur de remplissage est décidée par un champ dans la base de données avec la couleur en hexadécimal (ex: ClassX -> Couleur: # 66FFFF). Maintenant, je veux afficher des données au-dessus d'un remplissage avec la couleur sélectionnée (comme dans l'image ci-dessus) mais j'ai besoin de savoir si la couleur est sombre ou claire, donc je sais si les mots doivent être en blanc ou en noir. Y a-t-il un moyen? tks
Réponses:
S'appuyant sur ma réponse à une question similaire .
Vous devez diviser le code hexadécimal en 3 morceaux pour obtenir les intensités individuelles de rouge, vert et bleu. Chaque 2 chiffres du code représente une valeur en notation hexadécimale (base-16). Je n'entrerai pas dans les détails de la conversion ici, ils sont faciles à rechercher.
Une fois que vous avez les intensités pour les couleurs individuelles, vous pouvez déterminer l'intensité globale de la couleur et choisir le texte correspondant.
Le seuil de 186 est basé sur la théorie, mais peut être ajusté au goût. Sur la base des commentaires ci-dessous, un seuil de 150 peut fonctionner mieux pour vous.
Edit: ce qui précède est simple et fonctionne assez bien, et semble avoir une bonne acceptation ici à StackOverflow. Cependant, l'un des commentaires ci-dessous montre que cela peut conduire à la non-conformité aux directives du W3C dans certaines circonstances. Ci-joint, je dérive une forme modifiée qui choisit toujours le contraste le plus élevé en fonction des directives. Si vous n'avez pas besoin de vous conformer aux règles du W3C, je m'en tiendrai à la formule plus simple ci-dessus.
La formule donnée pour le contraste dans les Recommandations du W3C est
(L1 + 0.05) / (L2 + 0.05)
, oùL1
est la luminance de la couleur la plus claire etL2
la luminance de la plus sombre sur une échelle de 0,0 à 1,0. La luminance du noir est de 0,0 et celle du blanc de 1,0, donc la substitution de ces valeurs vous permet de déterminer celle avec le contraste le plus élevé. Si le contraste du noir est supérieur au contraste du blanc, utilisez le noir, sinon utilisez le blanc. Étant donné la luminance de la couleur que vous testez au fur et à mesure queL
le test devient:Cela simplifie algébriquement:
Ou environ:
Il ne reste plus qu'à calculer
L
. Cette formule est également donnée dans les lignes directrices et ressemble à la conversion de sRGB en RVB linéaire suivie de la recommandation UIT-R BT.709 pour la luminance.Le seuil de 0,179 ne doit pas être modifié car il est lié aux directives du W3C. Si vous ne trouvez pas les résultats à votre goût, essayez la formule plus simple ci-dessus.
la source
#D6B508
une valeur de 171, d'où un contraste blanc. Le contraste devrait cependant être noir (confirmé ici: webaim.org/resources/contrastchecker )Je ne prends aucun crédit pour ce code car ce n'est pas le mien, mais je le laisse ici pour que les autres le trouvent rapidement à l'avenir:
Basé sur la réponse de Mark Ransoms, voici un extrait de code pour la version simple:
et voici l'extrait de code pour la version avancée:
Pour les utiliser, appelez simplement:
Merci aussi
Alx
etchetstone
.la source
isDark(bgColor)
Mon utilisation est alors juste'color': isDark(color)?'white':'black'
Que diriez-vous de cela (code JavaScript)?
la source
En plus des solutions arithmétiques, il est également possible d'utiliser un réseau neuronal AI. L'avantage est que vous pouvez l'adapter à vos propres goûts et besoins (c'est-à-dire que le texte blanc cassé sur les rouges saturés brillants a l'air bien et est tout aussi lisible que le noir).
Voici une démo Javascript soignée qui illustre le concept. Vous pouvez également générer votre propre formule JS directement dans la démo.
https://harthur.github.io/brain/
Voici quelques graphiques qui m'ont aidé à me faire une idée du problème . Dans le premier graphique, la luminosité est une constante 128, tandis que la teinte et la saturation varient. Dans le deuxième graphique, la saturation est une constante 255, tandis que la teinte et la luminosité varient.
la source
Voici ma solution en Java pour Android:
la source
Sur la base de la réponse de @MarkRansom, j'ai créé un script PHP que vous pouvez trouver ici:
la source
Ceci est une version rapide de la réponse de Mark Ransom comme une extension de UIColor
la source
Ceci est juste un exemple qui changera la couleur d'une coche SVG lorsque vous cliquez sur un élément. Il définira la couleur de la coche sur noir ou blanc en fonction de la couleur d'arrière-plan de l'élément cliqué.
https://gist.github.com/dcondrey/183971f17808e9277572
la source
J'utilise cette fonction JavaScript pour convertir
rgb
/rgba
vers'white'
ou'black'
.Vous pouvez entrer n'importe lequel de ces formats et il sortira
'black'
ou'white'
rgb(255,255,255)
rgba(255,255,255,0.1)
color:rgba(255,255,255,0.1)
255,255,255,0.1
la source
La réponse détaillée de Mark fonctionne très bien. Voici une implémentation en javascript:
Vous pouvez ensuite appeler cette fonction
lum([111, 22, 255])
pour obtenir du blanc ou du noir.la source
Je n'ai jamais rien fait de tel, mais qu'en est-il de l'écriture d'une fonction pour vérifier les valeurs de chacune des couleurs par rapport à la couleur médiane de Hex 7F (FF / 2). Si deux des trois couleurs sont supérieures à 7F, alors vous travaillez avec une couleur plus foncée.
la source
Sur la base de différentes entrées du lien Rendre l'avant-plan noir ou blanc en fonction de l'arrière - plan et de ce fil, j'ai créé une classe d'extension pour Couleur qui vous donne les couleurs de contraste requises.
Le code va comme ci-dessous:
la source
Si comme moi vous cherchiez une version RGBA qui prend en compte l'alpha, en voici une qui fonctionne vraiment bien pour avoir un contraste élevé.
la source
Il s'agit d'une version R de la réponse de Mark Ransom, utilisant uniquement la base R.
la source
@SoBiT, je regardais votre réponse, qui semble bonne, mais elle contient une petite erreur. Votre fonction hexToG et hextoB ont besoin d'une modification mineure. Le dernier nombre dans substr est la longueur de la chaîne, et dans ce cas, il devrait être "2", plutôt que 4 ou 6.
la source
MOINS a une belle
contrast()
fonction qui a bien fonctionné pour moi, voir http://lesscss.org/functions/#color-operations-contrast"Choisissez laquelle des deux couleurs offre le plus grand contraste avec une autre. Ceci est utile pour garantir qu'une couleur est lisible sur un arrière-plan, ce qui est également utile pour la conformité de l'accessibilité. Cette fonction fonctionne de la même manière que la fonction de contraste dans Compass for SASS. Conformément aux WCAG 2.0, les couleurs sont comparées en utilisant leur valeur luma corrigée gamma, et non leur légèreté. "
Exemple:
Production:
la source
De l'hexagone au noir ou blanc:
la source
Code de version Objective-c pour iOS basé sur la réponse de Mark:
la source
Qu'en est-il des tests avec toutes les couleurs 24 bits?
Sachez que la méthode YIQ renverra un rapport de contraste minimum de 1,9: 1, qui ne passe pas les tests AA et AAA WCAG2.0, en supposant un seuil de 128.
Pour la méthode W3C, il renverra un rapport de contraste minimum de 4,58: 1, qui réussira les tests AA et AAA pour le grand texte et le test AA pour le petit texte, il ne passera pas le test AAA pour le petit texte pour toutes les couleurs.
la source
Voici ma propre méthode que j'utilise et que je n'ai pas eu de problème jusqu'à présent 😄
la source
J'ai fait un module Python pour sélectionner la couleur de premier plan en fonction de la valeur RVB ou HEX de la couleur de fond: https://github.com/azaitsev/foreground
la source
Voici mon code pour Java Swing basé sur la réponse étonnante de Mark:
la source