Преобразование цвета HTML HEX или кортежа RGB в цвет X11

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


person Galmi    schedule 09.01.2012    source источник
comment
Это не код, но он может вам помочь. stackoverflow.com/a/31057489/832708   -  person BradH    schedule 25.06.2015


Ответы (4)


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

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

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

person Shawabawa    schedule 09.01.2012
comment
Дополнение: это не цвета X11, о которых вы говорите. Это 256-цветные цвета эмулятора терминала. Сам X11 использует кортежи RGB и/или программируемые карты цветов. - person zwol; 09.01.2012

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

person chepner    schedule 09.01.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 синий.

person Hooked    schedule 09.01.2012

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

person Benji York    schedule 09.05.2012