Cálculo del código de color difuminado

Conozco varios programas que calculan los colores en función de un porcentaje. Realmente me encanta cuando los colores se muestran de esta manera, ya que parecen desvanecerse de una manera opaca y no luminosa que es realmente indicativa de un estilo menos atrevido.

Me pregunto si alguien sabe cómo se calculan estos nuevos colores desvanecidos en función de un color inicial (código RGB255) y cómo puedo calcular estos colores yo mismo.

En particular, estoy buscando un buen verde desteñido que se vea bien cuando se muestre como contornos menores y creo que saber que este proceso puede ayudarme a encontrar uno. (Si tiene una sugerencia para un color, ¡comparta!)

Ejemplos de desvanecimiento de color

Este generador de tonos de color es genial. tutorialrepublic.com/html-reference/html-color-picker.php . seleccione los valores rgb y le mostrará diferentes niveles de luz de ese color.
No hay una respuesta simple a esto. Las variaciones de colores se pueden calcular de muchas maneras diferentes.
En mi humilde opinión, calcular un color es solo una herramienta para encontrar el tono correcto. Tiendo a encontrar que los valores calculados están cerca, pero mirar a los ojos generalmente requiere un ajuste, lejos del valor calculado.

Respuestas (2)

Hay varias formas. Mezclando los colores, matemáticamente:

(1-a)*FGcolor+ a*BGcolor

Mezclaría los colores como si el color fg se mezclara alfa con el color bg. Podrías mezclar con blanco, negro o cualquier otro color. la variable ai entre 0 y 1. Ejemplo en python:

from Tkinter import *

def ablend(a, fg, bg):
    return ((1-a)*fg[0]+a*bg[0],
            (1-a)*fg[1]+a*bg[1],
            (1-a)*fg[2]+a*bg[2])

root = Tk()
num=8.0

fg=(100, 200, 170)
bg=(255,255,255)

for i in range(int(num)+1):
  col = ablend(i/num, fg, bg)
  e = Label(root, text=" "*70, background='#%02x%02x%02x' % col)
  e.grid(row=i)

root.mainloop()

Esto daría como resultado una ventana que mezcla colores. Puede cambiar libremente el color bg.

    ventana resultante

Imagen 1: resultado del código

También puedes mezclar de otras maneras. como la interpolación rgb/hsb/hsl. Muestra usando la interpolación hsv:

from colorsys import rgb_to_hsv, hsv_to_rgb

# replace ablend with hsvblend
def hsvblend(a, fg, bg):
    fgh = rgb_to_hsv(fg[0]/255.,fg[1]/255.,fg[2]/255.)
    bgh = rgb_to_hsv(bg[0]/255.,bg[1]/255.,bg[2]/255.)
    ret = hsv_to_rgb(
            (1-a)*fgh[0]+a*bgh[0],
            (1-a)*fgh[1]+a*bgh[1],
            (1-a)*fgh[2]+a*bgh[2])
    return ret[0]*255,ret[1]*255,ret[2]*255

Y así...

    otra mezcla

Imagen 2: Uso de la mezcla hsv

Y aquí hay una imagen adicional que muestra un fondo no blanco que se comporta un poco mejor que el blanco completamente saturado.

bono

Imagen 3: mostrando mejor las diferencias entre los modos (el blanco y el negro son problemáticos para hsv)

PD: perdón por el código extremadamente desordenado

¡Guau! ¡Tomaste eso en una dirección mucho más técnica de lo que esperaba en GD.SE!
@plainclothes bueno, tengo una educación técnica, así que a veces me voy por la tangente hacia el lado oscuro.
Muy apreciado. Nos anima a todos a mantener nuestros conocimientos de código actualizados ;)
Esta es una respuesta asombrosa. Aprecio el enfoque técnico y la mayor comprensión de la combinación de colores para obtener paletas de colores interesantes. ¡Gracias!

Tres opciones clave

  • Cambios directos de opacidad
  • manipulación HSB
  • preprocesadores CSS

Opacidad

Es rápido y fácil, pero tiene el costo potencial de corromper el color donde se superpone a algo que no sea blanco.

.selector { opacity: .36 ; }

HSB

Hace un muy buen trabajo y le brinda más control, pero tiene el costo de convertir entre RGB/Hex y otro modelo (hay bibliotecas js para resolver eso). Para aclarar y desaturar, los controles son obvios:

  1. Reduzca el valor de rectitud de B
  2. Ajuste la saturación a su gusto.

Trabajando juntos, esos dos canales le brindan un control muy elegante sobre su paleta.

preprocesadores CSS

Herramientas como Sass le brindan un control rápido y fácil sobre el cambio de color. Esto es lo que la mayoría de los desarrolladores de UI [progresivos] están usando en la web hoy en día por su elegante implementación y administración. No tienes el problema de la opacidad; tampoco obtienes el control fino de HSB.

$mainColor: #900;
$secondColor: #009;
.useMainColor { 
  color: $mainColor; 
  }
.useLigherMainColor { 
  color: lighten( $mainColor, 60% ); // < lighten it
  }
.useDarkerSecondColor { 
  color: darken( $secondColor, 20% ); // < darken it
  }
Buena respuesta, pero no estoy seguro de que el OP pregunte específicamente sobre el color en CSS.
@ DA01 Sí, me doy cuenta de que hay algo de "desplazamiento del alcance" en mi respuesta. Las dos primeras respuestas son relevantes en la mayoría de los entornos. El último es para el escenario probable de que otros quieran aplicar esto a las interwebs;)