Formule pour connaître le résultat d'une couleur après lui avoir appliqué une opacité de x%?


10

J'ai 2 couleurs

  1. #a1a2a4
  2. noir ( #000000)
  3. blanc ( #ffffff)

Maintenant, j'ai besoin de savoir combien d'opacité (en pourcentage) dois-je appliquer à la deuxième couleur (noir) sur un arrière-plan de la troisième couleur (blanc) pour obtenir une couleur "la plus proche" (déterminée par l'œil) de la première couleur ( #a1a2a4).

Comment dois-je procéder?



Je suis un peu confus par votre libellé: vous voulez un grayton qui se rapproche le plus de la couleur spécifiée, n'est-ce pas?
horatio

Réponses:


6

Ce cas est plus ou moins simple (vous avez affaire au noir et blanc).

Après avoir appliqué la couleur (# a1a2a4), vérifiez les niveaux RVB:

Niveaux RVB

Vous pouvez voir qu'il en a environ 162 (en moyenne), et sachant qu'il peut aller de 0 à 255, il vous suffit de connaître le pourcentage:

162 * 100/255 = ~ 63,5%

Maintenant, comme RVB fonctionne de manière opposée par rapport à CMJN (en termes de mélange de couleurs, c'est-à-dire que le mélange de couleurs signifie blanc et avec le mélange de couleurs CMJN signifie noir), le pourcentage réel dans ce cas est la différence entre 100% et la valeur que nous avons:

100 - 63,5 = 36,5%

Donc si vous appliquez 36% d'opacité, elle aura cette couleur, je viens de la tester.

Bien sûr, dans les cas avec des couleurs plus complexes, cette méthode ne fonctionne pas et je ne sais pas comment obtenir le pourcentage, je ferais les essais et erreurs classiques.


4

La question, si je comprends bien, est "Comment calculeriez- vous cela par programme?" Il est simple de convertir votre "couleur" cible en une valeur alpha.

Blanc == [1,1,1] ou #ffffff ou 255,255,255, selon votre application. Noir == [0,0,0], etc.

Donc: normalisez la valeur cible (dans ce cas, c'est 0,6314), soustrayez de 1 et appliquez au calque noir comme valeur alpha. Vous pouvez faire cela un canal à la fois, et faire la moyenne des résultats, mais pourquoi s'inquiéter, car votre couleur est indiscernable (à l'œil) d'un gris neutre # a1a1a1. (Les choses deviennent plus complexes s'il y a une teinte visible, car les canaux auront alors des valeurs différentes, mais le même principe s'applique.)


C'est un geekage vraiment sexy juste là. 8)
Lauren-Clear-Monica-Ipsum

3
Merci! <ajuste le protecteur de poche, veille à ce que les stylos soient régulièrement espacés>
Alan Gilbertson

0

Une variante légèrement plus rapide des essais et erreurs:

Créez votre couleur hexadécimale dans Photoshop dans un document CMJN et examinez les valeurs CMJN. J'obtiens 39/32/31/1.

Créez deux calques, le noir supérieur et le blanc inférieur.

Ouvrez la fenêtre Info. Séparément, ouvrez la fenêtre Calques.

Jouez avec l'opacité du calque noir. Utilisez la pipette sur votre couleur et vérifiez dans la fenêtre d'informations pour voir à quel point vous vous rapprochez. Cela vous fait surtout gagner du temps pour changer l'opacité - aplatir - vérifier la couleur - annuler l'aplatissement.


Vous avez raison, mais il existe une façon beaucoup plus geek de le faire. 8-D
Alan Gilbertson

0

Compte tenu de vos couleurs de premier plan et d'arrière-plan (valeurs uniformes sur les canaux R, G et B), vous ne pouvez pas obtenir une couleur non uniforme de #a1a2a4en modifiant l'opacité car l'opacité affecte tous les canaux à la fois. Cependant, vous pouvez obtenir une couleur "suffisamment proche" #a1a1a1en définissant l'opacité du noir sur 0.37. Voici l'outil que j'ai utilisé:

http://colorizer.org/

  1. Cliquez sur "Arrière-plan" et définissez la valeur hexadécimale sur #fff
  2. Cliquez sur "Bouton" et définissez la valeur hexadécimale sur #000
  3. Utilisez un utilitaire pipette pour trouver la couleur cible sur le spectre "Alpha / Opacité", puis cliquez sur le spectre pour obtenir la valeur d'opacité.

0

Trouver cette formule est un excellent exercice d'algèbre linéaire. En utilisant RVB et algèbre linéaire, j'ai trouvé cette matrice M. Si vous voulez combiner RGBred = (237,32,36) et RGBblue = (60,84,165) où la couche inférieure est à 100% d'opacité et la couche supérieure à 50% l'opacité multiplie alors Mv où M est la matrice ci-dessous et v = (237,32,36,60,84,165). Nous obtenons Mv = (157,777,71.444,107.444).

La valeur réelle est (159,71,103) donc nous sommes assez proches mais il y a une erreur - probablement soit parce que j'utilisais des valeurs arrondies pour calculer M et / ou parce qu'il n'utilise pas RVB mais une autre échelle pour calculer la transparence aplanissement. Je pourrais probablement obtenir une matrice plus précise en utilisant une approche de type moindres carrés mais j'étais trop paresseux.

La matrice MI obtenue est

M=[-0.316438695251802233798084520470 -0.0205011495462359668020633451463 -0.627769626184202308338411657855 
    4.83088877248122926488562947487 -0.673109830626855247075257552051 0.137681159420289855072463768116]
[2.67597831835520455938498494132 0.215715090307662822540065922133 1.69848459052630338054958974280 -13.9750196437925615505500261925 
    3.20021608171817705605028810915 -0.370471014492753623188405797101]
[-6.62632375526968419148486246260 0.509833585674322977062528534400 -3.14436345482363613544439381045 35.0629474419416797625283743688
    -6.69242186135847738781211803779 1.41304347826086956521739130435]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.