我正在搜索单个函数将RGB元组(255, 255, 255
)或HTML十六进制(#FFFFFF
)转换为X11颜色(0...255 int
)以管理Unix终端中的颜色。我查看了互联网,但我没有找到类似的东西,所以我要求代码或链接到一个网站,其中包含有关如何在Python中执行此操作的代码或信息。
答案 0 :(得分:1)
您无法自动转换为x11颜色。
x11颜色基本上只是映射到任意RGB值的名称,因此从RGB到x11的唯一方法是反转地图。
如果你想将不在x11中的RGB颜色转换为x11中最接近的匹配,那将非常困难。
答案 1 :(得分:1)
如果我理解你的问题,我认为你不能这样做。 RGB元组(及其表示为HTML的6位十六进制数字)表示RGB颜色空间中的特定颜色。对于Unix终端,您提到的0到255范围内的单个整数不是特定颜色,而是颜色表的索引。例如,一个终端上的颜色15可以是#ff0000,而另一个终端上的#33ff33。两者之间确实没有转换。
答案 2 :(得分:1)
正如@chepner和@Shawabawa都提到的那样,没有从RGB代码的3元组或6位十六进制到8位(0-255)的单个数字的映射。实际上,如果存在,则必须丢失一些信息,因为映射是多对一的。但是,您可以使用(BASH)颜色代码作为构建Python脚本的起点。例如,使用以下变量:
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m' # Black - Background
bakred='\e[41m' # Red
badgrn='\e[42m' # Green
bakylw='\e[43m' # Yellow
bakblu='\e[44m' # Blue
bakpur='\e[45m' # Purple
bakcyn='\e[46m' # Cyan
bakwht='\e[47m' # White
txtrst='\e[0m' # Text Reset
您可以将其放入脚本中,即
cmd = "export PS1='%s'"
prompt = "%s foo %s bar : "
prompt = prompt % (undred, txtblu)
print cmd % prompt
当我运行输出时,我得到类似的东西:
t@hydrogen:~/test/color$ python test.py
export PS1='\e[4;31m foo \e[0;34m bar : '
t@hydrogen:~/test/color$ export PS1='\e[4;31m foo \e[0;34m bar : '
foo bar :
现在foo是红色并加下划线,条形为蓝色。
答案 3 :(得分:0)
Fabulous可以将任意RGB颜色映射到最接近的xterm 256颜色。