Jul*_*ite 45 python rgb colors
在这里解决Jeremy的反应:将十六进制颜色转换为RGB,反之亦然我能够获得一个python程序来转换预设颜色十六进制代码(例如#B4FBB8),但是从最终用户的角度来看,我们不能要求人们编辑代码并从那里运行.如何提示用户输入十六进制值然后从那里吐出RGB值?
这是我到目前为止的代码:
def hex_to_rgb(value):
value = value.lstrip('#')
lv = len(value)
return tuple(int(value[i:i + lv // 3], 16) for i in range(0, lv, lv // 3))
def rgb_to_hex(rgb):
return '#%02x%02x%02x' % rgb
hex_to_rgb("#ffffff") # ==> (255, 255, 255)
hex_to_rgb("#ffffffffffff") # ==> (65535, 65535, 65535)
rgb_to_hex((255, 255, 255)) # ==> '#ffffff'
rgb_to_hex((65535, 65535, 65535)) # ==> '#ffffffffffff'
print('Please enter your colour hex')
hex == input("")
print('Calculating...')
print(hex_to_rgb(hex()))
Run Code Online (Sandbox Code Playgroud)
使用该线print(hex_to_rgb('#B4FBB8'))我能够让它吐出正确的RGB值,即(180,251,184)
它可能非常简单 - 我对Python仍然很粗糙.
Joh*_*024 93
我相信这可以满足您的需求:
h = input('Enter hex: ').lstrip('#')
print('RGB =', tuple(int(h[i:i+2], 16) for i in (0, 2, 4)))
Run Code Online (Sandbox Code Playgroud)
(以上是为Python 3编写的)
样品运行:
Enter hex: #B4FBB8
RGB = (180, 251, 184)
Run Code Online (Sandbox Code Playgroud)
fhandle在保留格式的同时写入带句柄的文件:
fhandle.write('RGB = {}'.format( tuple(int(h[i:i+2], 16) for i in (0, 2, 4)) ))
Run Code Online (Sandbox Code Playgroud)
Sup*_*ova 24
您可以ImageColor从枕头使用。
>>> from PIL import ImageColor
>>> ImageColor.getcolor("#23a9dd", "RGB")
(35, 169, 221)
Run Code Online (Sandbox Code Playgroud)
alv*_*vas 10
尝试这个:
def rgb_to_hex(rgb):
return '%02x%02x%02x' % rgb
Run Code Online (Sandbox Code Playgroud)
用法:
>>> rgb_to_hex((255, 255, 195))
'ffffc3'
Run Code Online (Sandbox Code Playgroud)
反之亦然:
def hex_to_rgb(hexa):
return tuple(int(hexa[i:i+2], 16) for i in (0, 2, 4))
Run Code Online (Sandbox Code Playgroud)
用法:
>>> hex_to_rgb('ffffc3')
(255, 255, 195)
Run Code Online (Sandbox Code Playgroud)
PIL也有这个功能,在ImageColor中。
from PIL import ImageColor
ImageColor.getrgb("#9b9b9b")
Run Code Online (Sandbox Code Playgroud)
如果你想要从 0 到 1 的数字
[i/256 for i in ImageColor.getrgb("#9b9b9b")]
Run Code Online (Sandbox Code Playgroud)
另一个选择:matplotlib.colors模块。
非常简单:
>>> import matplotlib.colors
>>> matplotlib.colors.to_rgb('#B4FBB8')
(0.7058823529411765, 0.984313725490196, 0.7215686274509804)
Run Code Online (Sandbox Code Playgroud)
注意输入的to_rgb不需要是十六进制颜色格式,它允许几种颜色格式。
您还可以使用已弃用的 hex2color
>>> matplotlib.colors.hex2color('#B4FBB8')
(0.7058823529411765, 0.984313725490196, 0.7215686274509804)
Run Code Online (Sandbox Code Playgroud)
好处是我们有反函数,to_hex以及一些额外的函数,例如,rgb_to_hsv。
此函数将从十六进制代码以浮点数形式返回RGB值。
def hextofloats(h):
'''Takes a hex rgb string (e.g. #ffffff) and returns an RGB tuple (float, float, float).'''
return tuple(int(h[i:i + 2], 16) / 255. for i in (1, 3, 5)) # skip '#'
Run Code Online (Sandbox Code Playgroud)
此函数将从RGB值返回十六进制代码。
def floatstohex(rgb):
'''Takes an RGB tuple or list and returns a hex RGB string.'''
return f'#{int(rgb[0]*255):02x}{int(rgb[1]*255):02x}{int(rgb[2]*255):02x}'
Run Code Online (Sandbox Code Playgroud)
因为十六进制代码可以像"#FFF"、"#000"、"#0F0"甚至"#ABC"只使用三位数字。这些只是编写代码的简写版本,即三对相同的数字"#FFFFFF"、"#000000"或"#00FF00"。"#AABBCC"
该函数的制作方式使其既可以使用简写,也可以使用全长的十六进制代码。如果参数hsl = Falseelse 返回 HSL 值,则返回 RGB 值。
import re
def hex_to_rgb(hx, hsl=False):
"""Converts a HEX code into RGB or HSL.
Args:
hx (str): Takes both short as well as long HEX codes.
hsl (bool): Converts the given HEX code into HSL value if True.
Return:
Tuple of length 3 consisting of either int or float values.
Raise:
ValueError: If given value is not a valid HEX code."""
if re.compile(r'#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?$').match(hx):
div = 255.0 if hsl else 0
if len(hx) <= 4:
return tuple(int(hx[i]*2, 16) / div if div else
int(hx[i]*2, 16) for i in (1, 2, 3))
return tuple(int(hx[i:i+2], 16) / div if div else
int(hx[i:i+2], 16) for i in (1, 3, 5))
raise ValueError(f'"{hx}" is not a valid HEX code.')
Run Code Online (Sandbox Code Playgroud)
以下是一些 IDLE 输出。
>>> hex_to_rgb('#FFB6C1')
(255, 182, 193)
>>> hex_to_rgb('#ABC')
(170, 187, 204)
>>> hex_to_rgb('#FFB6C1', hsl=True)
(1.0, 0.7137254901960784, 0.7568627450980392)
>>> hex_to_rgb('#ABC', hsl=True)
(0.6666666666666666, 0.7333333333333333, 0.8)
>>> hex_to_rgb('#00FFFF')
(0, 255, 255)
>>> hex_to_rgb('#0FF')
(0, 255, 255)
>>> hex_to_rgb('#0FFG') # When invalid hex is given.
ValueError: "#0FFG" is not a valid HEX code.
Run Code Online (Sandbox Code Playgroud)
以下函数将十六进制字符串转换为 RGB 值:
def hex_to_rgb(hex_string):
r_hex = hex_string[1:3]
g_hex = hex_string[3:5]
b_hex = hex_string[5:7]
return int(r_hex, 16), int(g_hex, 16), int(b_hex, 16)
Run Code Online (Sandbox Code Playgroud)
这会将 hexadecimal_string 转换为十进制数
int(hex_string, 16)
Run Code Online (Sandbox Code Playgroud)
例如:
int('ff', 16) # Gives 255 in integer data type
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42031 次 |
| 最近记录: |