我想将十六进制三元组转换为RGB元组,然后将元组转换为十六进制三元组。
答案 0 :(得分:71)
>>> import struct
>>> rgbstr='aabbcc'
>>> struct.unpack('BBB',rgbstr.decode('hex'))
(170, 187, 204)
和
>>> rgb = (50,100,150)
>>> struct.pack('BBB',*rgb).encode('hex')
'326496'
答案 1 :(得分:25)
尝试 pythonic :
>>> rgbstr='aabbcc'
>>> tuple(ord(c) for c in rgbstr.decode('hex'))
(170, 187, 204)
>>> tuple(map(ord, rgbstr.decode('hex'))
(170, 187, 204)
和
>>> rgb=(12,50,100)
>>> "".join(map(chr, rgb)).encode('hex')
'0c3264'
答案 2 :(得分:17)
你可以使用一个带有一些切片和移位的查找表 - 所有相对快速的操作 - 来创建一些在Python 2和3中都能保持不变的函数:
_NUMERALS = '0123456789abcdefABCDEF'
_HEXDEC = {v: int(v, 16) for v in (x+y for x in _NUMERALS for y in _NUMERALS)}
LOWERCASE, UPPERCASE = 'x', 'X'
def rgb(triplet):
return _HEXDEC[triplet[0:2]], _HEXDEC[triplet[2:4]], _HEXDEC[triplet[4:6]]
def triplet(rgb, lettercase=LOWERCASE):
return format(rgb[0]<<16 | rgb[1]<<8 | rgb[2], '06'+lettercase)
if __name__ == '__main__':
print('{}, {}'.format(rgb('aabbcc'), rgb('AABBCC')))
# -> (170, 187, 204), (170, 187, 204)
print('{}, {}'.format(triplet((170, 187, 204)),
triplet((170, 187, 204), UPPERCASE)))
# -> aabbcc, AABBCC
print('{}, {}'.format(rgb('aa0200'), rgb('AA0200')))
# -> (170, 2, 0), (170, 2, 0)
print('{}, {}'.format(triplet((170, 2, 0)),
triplet((170, 2, 0), UPPERCASE)))
# -> aa0200, AA0200
答案 3 :(得分:17)
我找到了一个简单的方法:
car
答案 4 :(得分:11)
matplotlib使用值为0到1的RGB元组:
from matplotlib.colors import hex2color, rgb2hex
hex_color = '#00ff00'
rgb_color = hex2color(hex_color)
hex_color_again = rgb2hex(rgb_color)
rgb_color
和hex_color
都采用matplotlib可接受的格式。
html使用RGB元组,其值介于0到255之间。
您可以使用模块webcolors在它们之间进行转换,使用函数hex_to_rgb
,rgb_to_hex
答案 5 :(得分:10)
将rgb转换为十六进制的非常简单的方法
>>> rgb = (255, 255, 255)
>>> r, g , b = rgb
>>> hex(r)
'0xff'
>>> hex(r) + hex(g)[2:] + hex(b)[2:]
'0xffffff'
>>>
将Hex转换为rgb
的简单方法>>> h = '0xffffff'
>>> h1, h2, h3 = h[0:4], '0x' + h[4:6], '0x' + h[6:8]
>>> h1, h2, h3
('0xff', '0xff', '0xff')
>>> r, g , b = int(h1, 16), int(h2, 16), int(h3, 16)
>>> r, g, b
(255, 255, 255)
使用提供这些功能的模块:webcolors
>>> hex_to_rgb('#000080')
(0, 0, 128)
>>> rgb_to_hex((255, 255, 255))
'#ffffff'
功能doc:
hex_to_rgb(hex_value) 将十六进制颜色值转换为适合在指定该颜色的rgb()三元组中使用的3元组整数。
rgb_to_hex(rgb_triplet): 将适合在rgb()颜色三元组中使用的3元组整数转换为该颜色的标准化十六进制值。
答案 6 :(得分:5)
def hex_to_int_color(v):
if v[0] == '#':
v = v[1:]
assert(len(v) == 6)
return int(v[:2], 16), int(v[2:4], 16), int(v[4:6], 16)
def int_to_hex_color(v):
assert(len(v) == 3)
return '#%02x%02x%02x' % v
答案 7 :(得分:3)
十六进制到RGB元组
>>> tuple(bytes.fromhex('61559a'))
(97, 85, 154)
RGB元组转换为十六进制
>>> bytes((97, 85, 154)).hex()
'61559a'
无需导入!
这是什么魔术?!
由于字节对象是整数序列(类似于元组),因此 字节对象b,b [0]将是一个整数,而b [0:1]将是一个字节 长度为1的对象
...
字节对象的表示使用文字格式(b'...') 因为它通常比例如位元组([46,46,46])。您可以 始终使用list(b)将字节对象转换为整数列表。
来源:https://docs.python.org/3/library/stdtypes.html#bytes-objects
答案 8 :(得分:1)
import re
def hex_to_int_color(v):
return tuple(int(i,16) for i in re.match(
r'^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$', v,
flags=re.IGNORECASE).groups())
def int_to_hex_color(v):
return '#%02x%02x%02x' % v
答案 9 :(得分:1)
你走了。我使用它将$path = "uploads/File Name/";
$files = scandir($path);
foreach ($files as $csv_file) {
$filepath = str_replace(" ", "\ ", $csv_file);
echo $filepath . '<br/>';
unlink($csv_file);
}
格式的颜色转换为graphviz颜色格式#RGBA
。
prefix=#
用法:
def rgba_hex( color, prefix = '0x' ):
if len( color ) == 3:
color = color + (255,)
hexColor = prefix + ''.join( [ '%02x' % x for x in color ] )
return hexColor