Конвертировать HTML HEX Color или кортеж RGB в цвет X11 - PullRequest
2 голосов
/ 09 января 2012

Я ищу одну функцию для преобразования кортежа RGB (255, 255, 255) или шестнадцатеричного HTML (#FFFFFF) в цвет X11 (0...255 int) для управления цветами в терминале Unix. Я просматривал Интернет, но ничего подобного не нашел, поэтому я прошу код или ссылку на сайт, который содержит код или информацию о том, как я могу сделать это в Python.

Ответы [ 4 ]

1 голос
/ 09 января 2012

Если я правильно понимаю ваш вопрос, я не думаю, что вы можете сделать это. Кортеж RGB (и его представление в виде 6-значного шестнадцатеричного числа для HTML) представляет определенный цвет в цветовом пространстве RGB. Единственное целое число в диапазоне от 0 до 255, которое вы упоминаете для терминала Unix, - это не определенный цвет, а индекс в таблице цветов. Например, цвет 15 на одном терминале может быть # ff0000, но # 33ff33 на другом. Между ними действительно нет преобразования.

1 голос
/ 09 января 2012

Как отметили @chepner и @Shawabawa, не существует сопоставления из 3-х корней RGB-кода или 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 синего цвета.

1 голос
/ 09 января 2012

Вы не можете автоматически конвертировать в цвета x11.

Цвета x11 - это просто имена, сопоставленные с произвольными значениями RGB , поэтому единственный способ перейти от RGB к x11 - это повернуть вспятькарта.

Если вы хотите преобразовать цвет RGB, который не в x11, в самое близкое соответствие в x11, это будет довольно сложно.

0 голосов
/ 09 мая 2012

Потрясающе может отображать произвольные цвета RGB в их ближайший цвет xterm 256.

...