Преобразование RGB окрашивает кортеж к шести кодам цифры в Python

Я должен преобразовать (0, 128, 64) к чему-то вроде этого № 008040. Я не уверен, что назвать последний, делающий поиск трудным.

65
задан rectangletangle 1 August 2010 в 04:22
поделиться

3 ответа

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

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

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

>>> '#%02x%02x%02x' % (0, -1, 9999)
'#00-1270f'
144
ответ дан 24 November 2019 в 15:10
поделиться
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)))
7
ответ дан 24 November 2019 в 15:10
поделиться
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 целых числа в [0,255] и всегда будет возвращать цвет при передаче 3 таких целых. Однако, судя по комментариям, это может быть не очевидно для всех, поэтому пусть это будет явно указано:

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

45
ответ дан 24 November 2019 в 15:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: