2015-03-06 1 views
0

Есть ли удобный способ преобразования значения с плавающей запятой в диапазоне [0,1] в гексаговый цвет HTML с использованием указанного градиента?Преобразование [0,1] значения с плавающей запятой в шестнадцатеричный цвет

На данный момент я использую:

.myclass {fill:red, fill-opacity:FLOATINGVAL} 

Но это несколько ограничительный градиент работать.

+0

Вы хотите его на Python или в CSS? –

+0

Вы можете сгенерировать цвет, полученный в результате трюка CSS, путем смешивания значений RGB с белым. См. [This related] (http://stackoverflow.com/questions/746899/how-to-calculate-an-rgb-colour-by-specifying-an-alpha-blending-amount). В принятом ответе 'alpha' является вашим' FLOATINGVAL', 'new' является RGB для красного (' [255,0,0] '), а' old' - RGB для белого ('[255,255,255]'). – jedwards

+0

Мне напоминают градиенты Matplotlib (см. [Здесь] (http://matplotlib.org/examples/color/colormaps_reference.html)). Мне не обязательно делать все в CSS: мне просто нужно указать цвет на каком-то градиенте, сгенерированном через какой-то пакет. – Richard

ответ

1

Рассмотрим что-то вроде:

def blend(color, alpha, base=[255,255,255]): 
    ''' 
    color should be a 3-element iterable, elements in [0,255] 
    alpha should be a float in [0,1] 
    base should be a 3-element iterable, elements in [0,255] (defaults to white) 
    ''' 
    out = [int(round((alpha * color[i]) + ((1 - alpha) * base[i]))) for i in range(3)] 

    return out 

print blend([255,0,0], 0)  # [255, 255, 255] (White) 
print blend([255,0,0], 0.25) # [255, 191, 191] 
print blend([255,0,0], 0.5)  # [255, 128, 128] 
print blend([255,0,0], 0.75) # [255, 64, 64] 
print blend([255,0,0], 1)  # [255,0,0]   (Red) 

# Or RGB hex values instead of lists: 
def to_hex(color): 
    return ''.join(["%02x" % e for e in color]) 

print to_hex(blend([255,0,0], 0))  # ffffff (White) 
print to_hex(blend([255,0,0], 0.25)) # ffbfbf 
print to_hex(blend([255,0,0], 0.5))  # ff8080 
print to_hex(blend([255,0,0], 0.75)) # ff4040 
print to_hex(blend([255,0,0], 1))  # ff0000 (Red) 

В плане того, как эта функция работает с gradients you listed [1], color цвет справа от градиента баров в то время как alpha ваша позиция на панели градиента (0.0 far left, 1.0 far right)

[1] Это будет работать только с 2-цветными градиентами - вашими «цветными» и «белыми» (или любым, что вы указываете base as) (т.е. градиенты от этого изображения, например Blues , Greens, Grays и т. Д.)

Вы не сможете создавать градиенты, такие как YlGnBu с этой функцией.

Смежные вопросы