¿Fórmula para descubrir el resultado de un color después de aplicarle x% de opacidad?


10

Tengo 2 colores

  1. #a1a2a4
  2. negro ( #000000)
  3. blanco ( #ffffff)

Ahora necesito saber cuánta opacidad (en porcentaje) debo aplicar al segundo color (negro) contra un fondo del tercer color (blanco) para lograr un color "más cercano" (según lo determinado por el ojo) al primero. color ( #a1a2a4).

¿Cómo hago para hacerlo?



Estoy un poco confundido por su redacción: desea un graytono más cercano al color especificado, ¿correcto?
Horatio

Respuestas:


6

Este caso es más o menos simple (se trata de blanco y negro).

Después de aplicar el color (# a1a2a4), verifique los niveles de RGB:

Niveles RGB

Puede ver que tiene aproximadamente 162 (promedio), y sabiendo que puede ir de 0 a 255, solo necesita averiguar el porcentaje:

162 * 100/255 = ~ 63,5%

Ahora, debido a que RGB funciona de manera opuesta en comparación con CMYK (en términos de mezcla de colores, es decir, la mezcla a todo color significa blanco y con la mezcla a todo color CMYK significa negro), el porcentaje real en este caso es la diferencia entre el 100% y el valor que tenemos

100 - 63,5 = 36,5%

Entonces, si aplicas el 36% de opacidad, tendrá este color, solo lo probé.

Por supuesto, en casos con colores más complejos, este método no funciona y no conozco una forma de obtener el porcentaje, haría el clásico ensayo y error.


4

La pregunta, si lo entiendo bien, es "¿Cómo calcularías esto programáticamente?" Es matemático sencillo convertir su "color" objetivo en un valor alfa.

Blanco == [1,1,1] o #ffffff o 255,255,255, dependiendo de su aplicación. Negro == [0,0,0], etc.

Entonces: normalice el valor objetivo (en este caso, es .6314), reste de 1 y aplique a la capa negra como un valor alfa. Puede hacer este canal a la vez y promediar los resultados, pero ¿por qué molestarse, ya que su color es indistinguible (a simple vista) de un gris neutro # a1a1a1. (Las cosas se vuelven más complejas si hay un tono visible, ya que los canales tendrán valores diferentes, pero se aplica el mismo principio).


Ese es un geekage realmente sexy allí mismo. 8)
Lauren-Clear-Monica-Ipsum

3
¡Por que gracias! <ajusta el protector de bolsillo, se asegura de que las plumas estén espaciadas uniformemente>
Alan Gilbertson

0

Una variante ligeramente más rápida de prueba y error:

Cree su color hexadecimal en Photoshop en un documento CMYK y observe los valores CMYK. Tengo 39/32/31/1.

Crea dos capas, la superior negra y la inferior blanca.

Abra la ventana de información. Por separado, abra la ventana Capas.

Juega con la opacidad de la capa negra. Use el cuentagotas sobre su color y verifique en la ventana de información para ver qué tan cerca se está acercando. Esto principalmente le ahorra el tiempo de cambio de opacidad - aplanar - verificar color - deshacer aplanar.


Tienes razón, pero hay una forma mucho más geek de hacerlo. 8-D
Alan Gilbertson

0

Dados los colores de primer plano y de fondo (valores uniformes en los canales R, G y B), no puede lograr un color no uniforme #a1a2a4cambiando la opacidad porque la opacidad afecta a todos los canales a la vez. Sin embargo, puede lograr un color "lo suficientemente cercano" #a1a1a1configurando la opacidad del negro en 0.37. Aquí está la herramienta que utilicé:

http://colorizer.org/

  1. Haga clic en "Fondo" y establezca el valor hexadecimal en #fff
  2. Haga clic en "Botón" y establezca el valor hexadecimal en #000
  3. Use una utilidad cuentagotas para encontrar el color objetivo en el espectro "Alfa / Opacidad", luego haga clic en el espectro para obtener el valor de opacidad.

0

Encontrar esta fórmula es un gran ejercicio en álgebra lineal. Usando RGB y álgebra lineal se me ocurrió esta matriz M. Si desea combinar RGBred = (237,32,36) y RGBblue = (60,84,165) donde la capa inferior es 100% de opacidad y la capa superior es 50% opacidad luego multiplica Mv donde M es la matriz de abajo y v = (237,32,36,60,84,165). Obtenemos Mv = (157.777,71.444,107.444).

El valor real es (159,71,103), así que estamos bastante cerca, pero hay algún error, probablemente porque estaba usando valores redondeados para calcular M y / o porque quizás no usa RGB sino alguna otra escala para calcular la transparencia aplastamiento. Probablemente podría obtener una matriz más precisa utilizando un enfoque de tipo de mínimos cuadrados, pero era demasiado vago.

La matriz que tengo MI es

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]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.