Пример #1
0
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) + "%)"
Пример #2
0
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