Создание диапазонов цветов в Python
Я хочу создать список цветовых спецификаций в виде (r, g, b) кортежей, которые охватывают весь спектр цветов с таким количеством записей, сколько мне нужно. Итак, для 5 записей я хотел бы что-то вроде:
- (0, 0, 1)
- (0, 1, 0)
- (1, 0, 0)
- (1, 0.5, 1)
- (0, 0, 0.5)
Конечно, если есть больше записей, чем комбинация из 0 и 1, она должна перейти к использованию дробей и т.д. Каким будет лучший способ сделать это?
Ответы
Ответ 1
Используйте цветовое пространство HSV/HSB/HSL (три названия более или менее одинаковые). Сгенерируйте N кортежей, равномерно распределенных в цветовом пространстве, затем просто преобразуйте их в RGB.
Пример кода:
import colorsys
N = 5
HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in range(N)]
RGB_tuples = map(lambda x: colorsys.hsv_to_rgb(*x), HSV_tuples)
Ответ 2
Я создал следующую функцию, основанную на ответе kquinn's.
import colorsys
def get_N_HexCol(N=5):
HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in xrange(N)]
hex_out = []
for rgb in HSV_tuples:
rgb = map(lambda x: int(x*255),colorsys.hsv_to_rgb(*rgb))
hex_out.append("".join(map(lambda x: chr(x).encode('hex'),rgb)))
return hex_out
Ответ 3
Следуя шагам kquinn и jhrf:)
Для Python 3 это можно сделать следующим образом:
def get_N_HexCol(N=5):
HSV_tuples = [(x * 1.0 / N, 0.5, 0.5) for x in range(N)]
hex_out = []
for rgb in HSV_tuples:
rgb = map(lambda x: int(x * 255), colorsys.hsv_to_rgb(*rgb))
hex_out.append('#%02x%02x%02x' % tuple(rgb))
return hex_out