Как генерировать темные оттенки шестнадцатеричных цветовых кодов в Python - PullRequest
0 голосов
/ 24 июня 2019

Я генерирую случайные разные цвета и генерирую их, как показано ниже:

 import random
 import numpy as np

 random_number = np.random.randint(0,16777215)
 hex_number = str(hex(random_number))
 hex_number ='#'+ hex_number[2:]

Но это генерирует в основном более светлые оттенки, а не темные.Как я могу изменить это, чтобы генерировать более темные оттенки. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Вы можете использовать приведенную ниже логику, чтобы затемнить цвет hex (используя оттенок, яркость, насыщенность (HLS) представление):

import numpy as np
from colormap import rgb2hex, rgb2hls, hls2rgb
# pip install colormap
# pip install easydev

def hex_to_rgb(hex):
     hex = hex.lstrip('#')
     hlen = len(hex)
     return tuple(int(hex[i:i+hlen//3], 16) for i in range(0, hlen, hlen//3))

def adjust_color_lightness(r, g, b, factor):
    h, l, s = rgb2hls(r / 255.0, g / 255.0, b / 255.0)
    l = max(min(l * factor, 1.0), 0.0)
    r, g, b = hls2rgb(h, l, s)
    return rgb2hex(int(r * 255), int(g * 255), int(b * 255))

def darken_color(r, g, b, factor=0.1):
    return adjust_color_lightness(r, g, b, 1 - factor)

random_number = np.random.randint(0,16777215)
hex_number = str(hex(random_number))
hex_number ='#'+ hex_number[2:]

r, g, b = hex_to_rgb(hex_number) # hex to rgb format
print(darken_color(r, g, b))

В приведенном выше примере вы можете установить параметр factor в соответствии с вашим требованием для настройки яркости / темноты цвета.

0 голосов
/ 24 июня 2019

Как показывают комментарии, возможно, лучше попробовать другое цветовое пространство. Например, вы можете использовать цветовое пространство HSV и некоторые функции, предоставляемые matplotlib.

import numpy as np
from matplotlib.colors import hsv_to_rgb, to_hex

def rand_col(min_v=0.5, max_v=1.0):
    hsv = np.concatenate([np.random.rand(2), np.random.uniform(min_v, max_v, size=1)])
    return to_hex(hsv_to_rgb(hdv))

Если вы уменьшите параметр min_v, вы можете получить более темные цвета.

...