【问题标题】:Convert HTML HEX Color or RGB tuple to X11 color将 HTML HEX 颜色或 RGB 元组转换为 X11 颜色
【发布时间】:2012-02-06 02:43:58
【问题描述】:

我正在寻找一个函数来将 RGB 元组 (255, 255, 255) 或 HTML 十六进制 (#FFFFFF) 转换为 X11 颜色 (0...255 int) 以管理 Unix 终端中的颜色。我查看了互联网,但没有找到类似的东西,所以我要求提供代码或链接到包含有关如何在 Python 中执行此操作的代码或信息的网站。

【问题讨论】:

标签: python colors hex x11 rgb


【解决方案1】:

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

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

如果您想将 x11 中不存在的 RGB 颜色转换为 x11 中最接近的匹配,这将非常困难。

【讨论】:

  • 附录:这些不是您所说的“X11 颜色”。它们是256 色终端仿真器 颜色。 X11 本身使用 RGB 元组和/或可编程颜色图。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    正如@chepner 和@Shawabawa 所提到的,没有从 RGB 代码或 6 位十六进制的 3 元组到 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 是蓝色。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2019-02-08
        • 2018-06-16
        • 1970-01-01
        • 2011-07-17
        • 1970-01-01
        • 2012-03-05
        • 2015-07-04
        • 2014-03-01
        相关资源
        最近更新 更多