Модуль colorsys
определяет двунаправленное преобразование цветовых значений между цветовыми системами, выраженными в цветовом пространстве RGB (красный, зеленый, синий), используемом в компьютерных мониторах, и в трех других системах координат: YIQ, HLS (оттенок, яркость, насыщенность) и HSV (оттенок, насыщенность).
colorsys
;Координаты во всех этих цветовых пространствах являются значениями float
. В пространстве YIQ координата Y находится в диапазоне от 0 до 1, но координаты I и Q могут быть положительными или отрицательными. Во всех других пространствах координаты находятся в диапазоне от 0 до 1.
colorsys
определяет следующие функции.colorsys.rgb_to_yiq(r, g, b)
- преобразует цвет из координат RGB в координаты YIQ.colorsys.yiq_to_rgb(y, i, q)
- преобразует цвет из координат YIQ в координаты RGB.colorsys.rgb_to_hls(r, g, b)
- преобразует цвета из координат RGB в координаты HLS.colorsys.hls_to_rgb(h, l, s)
- преобразует цвета из координат HLS в координаты RGB.colorsys.rgb_to_hsv(r, g, b)
- преобразует цвет из координат RGB в координаты HSV.colorsys.hsv_to_rgb(h, s, v)
- преобразует цвет из координат HSV в координаты RGB.colorsys
:>>> import colorsys >>> colorsys.rgb_to_hsv(0.2, 0.4, 0.4) # (0.5, 0.5, 0.4) >>> colorsys.hsv_to_rgb(0.5, 0.5, 0.4) # (0.2, 0.4, 0.4)
Преобразуем белый цвет из HEX в значение RGB:
# определяем функцию преобразования def hex2rgb(hex): return tuple(int(hex[i:i+2], 16) for i in (0, 2, 4)) # белый цвет HEX >>> hex_color = '#ffffff' # вырезаем значок `#` >>> hex_color = hex_color.lstrip('#') # преобразовываем в значение RGB >>> rgb_tuple = hex2rgb(hex_color) # объединяем аббревиатуру `rgb` с кортежем >>> res = 'rgb' + str(rgb_tuple) >>> res # 'rgb(255, 255, 255)'
Преобразуем полученное значение белого цвета RGB в цветовую систему HEX.
# определяем функцию преобразования def rgb2hex(r, g, b): return f'#{r:02x}{g:02x}{b:02x}' # белый цвет RGB rgb_color = 'rgb(255, 255, 255)' # извлекаем из rgb_color цифры в список import re color_list = [int(n) for n in re.findall('\d+', rgb_color)] # вставляем список с распаковкой res = rgb2hex(*color_list) res # '#ffffff'
def rgb2cmyk(r, g, b, rgb_scale=255, cmyk_scale=100): """Преобразование RGB в цветовую систему CMYK""" if (r, g, b) == (0, 0, 0): # значит черный return 0, 0, 0, cmyk_scale # rgb [0,255] -> cmy [0, 1] c = 1 - r / rgb_scale m = 1 - g / rgb_scale y = 1 - b / rgb_scale # извлекаем k [0, 1] min_cmy = min(c, m, y) c = (c - min_cmy) / (1 - min_cmy) m = (m - min_cmy) / (1 - min_cmy) y = (y - min_cmy) / (1 - min_cmy) k = min_cmy # масштабируем до диапазона [0, cmyk_scale] return c * cmyk_scale, m * cmyk_scale, y * cmyk_scale, k * cmyk_scale >>> rgb_color = (102, 255, 0) # Ярко-зелёный >>> rgb2cmyk(*rgb_color) # (60.0, 0.0, 100.0, 0.0)
def cmyk2rgb(c, m, y, k, cmyk_scale=100, rgb_scale=255): """Преобразование CMYK в цветовую систему RGB""" c = c / cmyk_scale m = m / cmyk_scale y = y / cmyk_scale k = k / cmyk_scale r = round(rgb_scale - ((min(1.0, c * (1.0 - k) + k)) * rgb_scale)) g = round(rgb_scale - ((min(1.0, m * (1.0 - k) + k)) * rgb_scale)) b = round(rgb_scale - ((min(1.0, y * (1.0 - k) + k)) * rgb_scale)) return r, g, b >>> cmyk_color = (60, 0, 100, 0) # Ярко-зелёный >>> cmyk2rgb(*cmyk_color) # (102, 255, 0)