将HTML HEX颜色或RGB元组转换为X11颜色



我正在搜索一个函数,将RGB元组(255, 255, 255)或HTML十六进制(#FFFFFF)转换为X11颜色(0...255 int),以管理Unix终端中的颜色。我在互联网上看了看,但没有发现这样的东西,所以我要求提供代码或链接到一个网站,该网站包含关于如何用Python实现这一点的代码或信息。

您无法自动转换为x11颜色。

x11颜色基本上只是映射到任意RGB值的名称,因此从RGB到x11的唯一方法是反转映射。

如果你想将x11中没有的RGB颜色转换为x11中最匹配的颜色,那将非常困难。

如果我能正确理解你的问题,我认为你做不到。RGB元组(及其表示为HTML的6位十六进制数字)表示RGB颜色空间中的特定颜色。您提到的Unix终端的0到255范围内的单个整数不是特定的颜色,而是颜色表的索引。例如,一个端子上的颜色15可以是#ff0000,但另一个端子的颜色可以是#33ff33。两者之间真的没有转换。

正如@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是带下划线的红色,bar是蓝色的。

Fabulous可以将任意RGB颜色映射到最接近的xterm 256颜色。

最新更新