Тестирование цветов HSL, в идеале избегая красного, смежного с зеленым (общий тип дальтонизма) - PullRequest
1 голос
/ 10 января 2011

Вдохновленный главным ответом на на этой странице Я написал программу на python для генерации N различных цветов HEX.Разница в том, что оригинальный автор будет генерировать насыщенность и яркость с помощью math.random (), тогда как я использую тригонометрическую функцию, которая, как я могу гарантировать, всегда будет давать уникальный оттенок, насыщенность и яркость, а также обеспечит преимущество, что I может запрограммировать желтый, чтобы он казался темнее синего, обеспечивая лучшую контрастность на белом фоне и черном тексте (для чего он мне нужен).Код, который я на самом деле использую, также преобразует HSL в HEX-коды через RGB, чтобы я мог создавать веб-коды цветов.Мои вопросы: -

  1. Используя эту модель, как я могу гарантировать , что красный не появится рядом с зеленым ??
  2. Генерация цветовых кодов достаточно проста, но как их легко увидеть?В настоящее время мне нужно загрузить довольно большой файл на сервер, который генерирует pdf / png / eps, прежде чем загружать его снова.
  3. Я могу сделать это с помощью тестирования, но есть ли у кого-нибудь опыт использования модели HSL для создания цветов, чей контраст максимально увеличен на белом фоне с черным текстом поверх цветов?Блюз может сделать черный текст действительно трудно различимым, а желтый иногда трудно различимым на фоне белого ...

пс.На самом деле это не код, который я использую, но все начинается здесь.Полный скрипт на python доступен здесь .Ура,Alex

>>> class generate_HSL_colours():
...    def __init__( self, N, shift=0, degrees=360 ):
...        dict.__init__(self)
...        self.N = N
...        hues = [ angle for angle in xrange( shift, shift+degrees , degrees / N ) ] # Default hues from 0 --> 360
...        self.colours = generate_HSL_colours()
...    def generate_HSL_colours(self,angles):
...        colours = []
...        colour = HSLColour()
...        for angle in angles:
...            cos_value = math.cos( angle * math.pi / 360 ) ## <== in radians. Degrees == cos( angle/2 ) ; so cos_value goes from 1 to -1, and 0 <= angle < 180.
...            ## Could use sin_value too...
...            saturation = 90 - (cos_value * 10)  ## Saturation from 80 --> 100
...            luminance = 50 + (cos_value * 10)   ## Lightness from 60 --> 40
...            HSLColour.hue = hue
...            HSLColour.saturation = saturation
...            HSLColour.luminance = luminance
...            colours.append( HSLColour )
...        return colours
...
...    def __iter__(self):  ## I put this in to answer a different question (see below).
...      for colour in self.colours:
...          yield repr(colour.hue, colour.saturation, colour.lightness)
... 

__iter__ функция написана как ответ на вопрос здесь

1 Ответ

1 голос
/ 10 января 2011
  1. А?Тест, и если вы получаете красный цвет, близкий к зеленому, вы получаете другой цвет?Я не уверен, что вопрос здесь.

  2. Вы можете создать PNG и открыть его локально.Это, наверное, самый простой.PIL - хорошая библиотека для этого.http://pypi.python.org/pypi/Pillow/

  3. Нет, извините, я ничего об этом не знаю.

...