def getHSL(r, g, b): # sources: # https://stackoverflow.com/questions/39118528/rgb-to-hsl-conversion # https://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/ # get base hue value r /= 255 g /= 255 b /= 255 maximum = max([r, g, b]) minimum = min([r, g, b]) chroma = maximum - minimum if chroma == 0: hue = 0 else: s = Switch(maximum) if s.case(r): segment = (g - b) / chroma shift = 0 if segment < 0: shift = 6 if s.case(g): segment = (b - r) / chroma shift = 2 if s.case(b): segment = (r - g) / chroma shift = 4 hue = (segment + shift) * 60 # get base luminace value luminace = (minimum + maximum) / 2 # get base saturation value if maximum == minimum: saturation = 0 else: if luminace < 0.5: saturation = chroma / (2 * luminace) else: saturation = chroma / (2 * (1 - luminace)) saturation *= 100 # reformat values luminace *= 100 if hue % 1 == 0: hue = int(hue) else: hue = round(hue, 2) if saturation % 1 == 0: saturation = int(saturation) else: saturation = round(saturation, 3) if luminace % 1 == 0: luminace = int(luminace) else: luminace = round(luminace, 3) return "HSL(" + str(hue) + "," + str(saturation) + "%," + str( luminace) + "%)"
def getHex(num): # assumes an integer between 0 and 255 hexString = '' # get first digit s = Switch(math.floor(num / 16)) if s.case(10): hexString = hexString + 'A' if s.case(11): hexString = hexString + 'B' if s.case(12): hexString = hexString + 'C' if s.case(13): hexString = hexString + 'D' if s.case(14): hexString = hexString + 'E' if s.case(15): hexString = hexString + 'F' if s.default(): hexString = hexString + str(math.floor(num / 16)) # get second digit s.restart(num % 16) if s.case(10): hexString = hexString + 'A' if s.case(11): hexString = hexString + 'B' if s.case(12): hexString = hexString + 'C' if s.case(13): hexString = hexString + 'D' if s.case(14): hexString = hexString + 'E' if s.case(15): hexString = hexString + 'F' if s.default(): hexString = hexString + str(num % 16) return hexString