Подтвердить что ты не робот

Преобразование цветового набора RGB в шестизначный код, в Python

Мне нужно преобразовать (0, 128, 64) в нечто вроде # 008040. Я не уверен, что назвать последним, что затрудняет поиск.

4b9b3361

Ответ 1

Используйте оператор формата %:

>>> '#%02x%02x%02x' % (0, 128, 64)
'#008040'

Обратите внимание, что он не будет проверять границы...

>>> '#%02x%02x%02x' % (0, -1, 9999)
'#00-1270f'

Ответ 2

def clamp(x): 
  return max(0, min(x, 255))

"#{0:02x}{1:02x}{2:02x}".format(clamp(r), clamp(g), clamp(b))

Здесь используется предпочтительный метод форматирования строк, как описанный в PEP 3101. Он также использует min() и max, чтобы гарантировать, что 0 <= {r,g,b} <= 255.

Обновить добавлена ​​функция зажима, как предлагается ниже.

Обновить. Из названия вопроса и указанного контекста должно быть очевидно, что это ожидает 3 int в [0,255] и всегда будет возвращать цвет при передаче 3 таких int. Однако из комментариев это может быть не очевидным для всех, поэтому давайте прямо укажем:

При условии трех значений int, это вернет действительный шестнадцатеричный триплет, представляющий цвет. Если эти значения находятся между [0,255], тогда они будут обрабатывать их как значения RGB и возвращать цвет, соответствующий этим значениям.

Ответ 3

Это старый вопрос, но для информации я разработал пакет с некоторыми утилитами, относящимися к цветам и цветовым картам, и содержит функцию rgb2hex, которую вы искали, чтобы преобразовать триплет в значение гекса (которое можно найти во многих других пакетах, например matplotlib). Это на pypi

pip install colormap

а затем

>>> from colormap import rgb2hex
>>> rgb2hex(0, 128, 64)
'##008040'

Проверяется действительность входов (значения должны быть между 0 и 255).

Ответ 4

triplet = (0, 128, 64)
print '#'+''.join(map(chr, triplet)).encode('hex')

или

from struct import pack
print '#'+pack("BBB",*triplet).encode('hex')

python3 немного отличается

from base64 import b16encode
print(b'#'+b16encode(bytes(triplet)))

Ответ 5

Здравствуйте, я создал полную программу python для него, следующие функции могут преобразовывать rgb в hex и наоборот.

def rgb2hex(r,g,b):
hex = "#{:02x}{:02x}{:02x}".format(r,g,b)
return hex

def hex2rgb(hexcode):
rgb = tuple(map(ord,hexcode[1:].decode('hex')))
return rgb

Вы можете увидеть полный код и учебник по следующей ссылке: Преобразование RGB в Hex и Hex в RGB с использованием Python

Ответ 6

В Python 3.6 вы можете использовать f-строки, чтобы сделать этот чист:

rgb = (0,128, 64)
f'#{rgb[0]:02x}{rgb[1]:02x}{rgb[2]:02x}'

Конечно, вы можете поместить это в функцию, а в качестве бонуса значения округляются и преобразуются в int:

def rgb2hex(r,g,b):
    return f'#{int(round(r)):02x}{int(round(g)):02x}{int(round(b)):02x}'

rgb2hex(*rgb)