В настоящее время я пытаюсь преобразовать цветовые коды hsl в hsv и наоборот в Python, но не могу найти простой способ сделать это.
Я попытался преобразовать коды косвенно, преобразовав hsl в rgb и rgb в hsv с помощью пакета colorsys
. К сожалению, по какой-то причине это не работает. Я всегда получаю невероятно маленькие значения (‹0, так что это не имеет никакого смысла).
Вот что я сделал:
import colorsys
def hsv_to_hsl(hsv):
h, s, v = hsv
rgb = colorsys.hsv_to_rgb(h,s,v)
r, g, b = rgb
hls = colorsys.rgb_to_hls(r,g,b)
return hls
hsv = (300, 65, 40)
print(hsv)
print(hsv_to_hsl(hsv))
Я также попытался написать свою собственную функцию, основанную на функции javascript, которую нашел на Github, но я получаю там те же странные значения (см. Ниже код для преобразования hsv в hsl). Проблема в том, что я действительно не нашел формулы в Википедии, поэтому я даже не знаю, имеет ли смысл то, что я вычислил ниже.
import math
def hsv_to_hsl(hsv):
h,sat,val = hsv
# hue h stays the same
# saturation s
if (2-sat)*val < 1:
s = sat*val / ((2-sat)*val)
else: s = sat*val / (2-(2-sat)*val)
# lightness l
l = 2-sat * val/2
# return code as tuple
return (h, s, l)
Есть ли простой способ сделать это с помощью пакета или у вас есть представление о том, что я мог бы сделать по-другому в своей функции?
Заранее спасибо за помощь!
Мерль