Мне нужно преобразовать (0, 128, 64) в нечто вроде # 008040. Я не уверен, что назвать последним, что затрудняет поиск.
Преобразование цветового набора RGB в шестизначный код, в Python
Ответ 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)