Подтвердить что ты не робот

Создание диапазонов цветов в Python

Я хочу создать список цветовых спецификаций в виде (r, g, b) кортежей, которые охватывают весь спектр цветов с таким количеством записей, сколько мне нужно. Итак, для 5 записей я хотел бы что-то вроде:

  • (0, 0, 1)
  • (0, 1, 0)
  • (1, 0, 0)
  • (1, 0.5, 1)
  • (0, 0, 0.5)

Конечно, если есть больше записей, чем комбинация из 0 и 1, она должна перейти к использованию дробей и т.д. Каким будет лучший способ сделать это?

4b9b3361

Ответ 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