RGB 和 16 进制颜色(HEX)相互转换

2016/08/17 Python

   想在 Python 随机生成16进制的颜色代码,找来找去没有发现好的包,于是自己写了一个生成 HEX 的颜色脚本,方便使用,还不用依赖第三方库。

理论部分

HEX 转换 RGB 算法

  • 从 HEX 表示颜色转换成 RGB 方法表示颜色,是HEX的第一位数乘以16加上第二位数举个例子:转换颜色为 #1722DF的 HEX 值到 RGB 值 
#1722DF ----------> rgb:

17 --------------> r: r的值就是: 1 * 16 + 7 = 23

22 --------------> g: g的值就是: 2 * 16 + 2 = 34

DF --------------> b: b的值就是: 16 * 13 + 15 = 223
  • 所以 #1722DF 转换为RGB的表示的值为 (23,34,223)

RGB 转换成 HEX 的算法

  • 从 RGB 转换成 HEX 表示颜色是 HEX 到 RGB 值的一个逆过程 对RGB的值分别除以16商加上余数就是HEX值了其中0对应的为00例如:转换(0,223,55)到HEX值
(0,223,55) --------> hex:

0 -----------------> 00: 0对应00

223 ---------------> DF: 223 / 16 = 13 余 15

55 ----------------> 37:  55 / 16  = 3 余 7

16进制16个数超过10对应关系:

  • 0~9 依次为对应二进制的 0~9

  • 超过10的部分对应关系:

11 ------------> A
12 ------------> B
13 ------------> C
14 ------------> D
15 ------------> E
16 ------------> F

Python 实现 RGB 和 HEX 相互转换:

def convert(value):
    """
    convert 2------>16
    :param value: input int type
    :return: str type(16)
    """
    if value == 10:
        return "A"
    elif value == 11:
        return "B"
    elif value == 12:
        return "C"
    elif value == 13:
        return "D"
    elif value == 14:
        return "E"
    elif value == 15:
        return "F"
    return str(value)


def convert_hex(value):
    """
    convert 16------2
    :param value: input string type
    :return: str type(2)
    """
    if value == "A":
        return str(10)
    elif value == "B":
        return str(11)
    elif value == "C":
        return str(12)
    elif value == "D":
        return str(13)
    elif value == "E":
        return str(14)
    elif value == "F":
        return str(15)
    return str(value)


def rgb2hex(rgb):
    """
    Convert RGB to HEX color
    :param rgb: Rge value example(23,32,44)
    :return: Hex value example #??????
    """
    hex = []
    for i in rgb:
        if i == 0:
            h = str(0) + str(0)
        else:
            h_left = i / 16
            h_right = i % 16
            h = convert(h_left) + convert(h_right)

        hex.append(h)
    hex_combine = "#" + ''.join(hex)
    return hex_combine


def hex2rgb(hex_value):
    """
    Convert hex to rgp
    :param hex_value: string type example "#1722DF"
    :return: a rgb color tuple example (23,34,223)
    """
    hex = hex_value[1:]
    hex_splite = [convert_hex(x) for x in hex if x]
    hex_splite_rgb = splite_string(hex_splite, 2)
    rgb = [int(line[0]) * 16 + int(line[1]) for line in hex_splite_rgb if line]
    return tuple(rgb)

def splite_string(s, n):
    return [s[i:i + n] for i in range(len(s)) if i % n == 0]

测试转换

hex2rgb("#1722DF")

(23, 34, 223)

rgb2hex((0,223,55))

'#00DF37'

参考:




  • 除非注明,本博文即为原创,转载请注明本博文链接地址
  • 本博文只用于分享和交流知识,不得转载商用或个人牟利
  • 如果您觉得文章对您有帮助,可以通过点击下面按钮分享

Search

    Post Directory