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

Создание случайного шестнадцатеричного цвета в Python

Для приложения Django каждому "члену" присваивается цвет, который помогает идентифицировать их. Их цвет сохраняется в базе данных, а затем печатается/копируется в HTML, когда это необходимо. Единственная проблема заключается в том, что я не уверен, как генерировать случайные цвета Hex в python/django. Это достаточно просто, чтобы генерировать RGB-цвета, но для их хранения мне либо понадобилось бы: a) сделать три дополнительных столбца в моей модели "Member" или b) сохранить их все в одном столбце и использовать запятые для их разделения, затем, проанализируйте цвета для HTML. Ни один из них не очень привлекателен, поэтому, опять же, мне интересно, как создавать случайные цвета Hex в python/django.

4b9b3361

Ответ 1

import random
r = lambda: random.randint(0,255)
print('#%02X%02X%02X' % (r(),r(),r()))

Ответ 2

Вот простой способ:

import random
color = "%06x" % random.randint(0, 0xFFFFFF)

Чтобы создать случайный цвет из трех символов:

import random
color = "%03x" % random.randint(0, 0xFFF)

%x в языках на основе C - это средство форматирования строк для форматирования целых чисел в виде шестнадцатеричных строк, в то время как 0x - это префикс для записи чисел в base-16.

При необходимости цвета могут начинаться с префикса "#" (стиль CSS)

Ответ 3

Сохраните его как значение цвета HTML:

Обновлено: теперь принимает аргументы integer (0-255) и float (0.0-1.0). Они будут зажаты до их допустимого диапазона.

def htmlcolor(r, g, b):
    def _chkarg(a):
        if isinstance(a, int): # clamp to range 0--255
            if a < 0:
                a = 0
            elif a > 255:
                a = 255
        elif isinstance(a, float): # clamp to range 0.0--1.0 and convert to integer 0--255
            if a < 0.0:
                a = 0
            elif a > 1.0:
                a = 255
            else:
                a = int(round(a*255))
        else:
            raise ValueError('Arguments must be integers or floats.')
        return a
    r = _chkarg(r)
    g = _chkarg(g)
    b = _chkarg(b)
    return '#{:02x}{:02x}{:02x}'.format(r,g,b)

Результат:

In [14]: htmlcolor(250,0,0)
Out[14]: '#fa0000'

In [15]: htmlcolor(127,14,54)
Out[15]: '#7f0e36'

In [16]: htmlcolor(0.1, 1.0, 0.9)
Out[16]: '#19ffe5'

Ответ 4

Это было сделано раньше. Вместо того, чтобы реализовывать это самостоятельно, возможно, вводя ошибки, вы можете использовать готовую библиотеку, например Faker. Ознакомьтесь с поставщиками цветов, в частности hex_digit.

In [1]: from faker import Factory

In [2]: fake = Factory.create()

In [3]: fake.hex_color()
Out[3]: u'#3cae6a'

In [4]: fake.hex_color()
Out[4]: u'#5a9e28'

Ответ 5

Просто сохраните их как целое число с тремя каналами при разных смещениях бит (точно так же, как они часто хранятся в памяти):

value = (red << 16) + (green << 8) + blue

(Если каждый канал равен 0-255). Сохраните это целое число в базе данных и выполните обратную операцию, когда вам нужно вернуться к отдельным каналам.

Ответ 6

немного поздно к вечеринке,

import random
chars = '0123456789ABCDEF'
['#'+''.join(sample(chars,6)) for i in range(N)]

Ответ 7

import random

def hex_code_colors():
    a = hex(random.randrange(0,256))
    b = hex(random.randrange(0,256))
    c = hex(random.randrange(0,256))
    a = a[2:]
    b = b[2:]
    c = c[2:]
    if len(a)<2:
        a = "0" + a
    if len(b)<2:
        b = "0" + b
    if len(c)<2:
        c = "0" + c
    z = a + b + c
    return "#" + z.upper()

Ответ 8

Так много способов сделать это, поэтому здесь демо с помощью colorutils".

pip install colorutils

Можно генерировать случайные значения в (RGB, HEX, WEB, YIQ, HSV).

# docs and downloads at 
# https://pypi.python.org/pypi/colorutils/

from colorutils import random_web
from tkinter import Tk, Button

mgui = Tk()
mgui.geometry('150x28+400+200')


def rcolor():
    rn = random_web()
    print(rn)  # for terminal watchers
    cbutton.config(text=rn)
    mgui.config(bg=rn)


cbutton = Button(text="Click", command=rcolor)
cbutton.pack()

mgui.mainloop()

Я, конечно, надеюсь, что это было полезно.

Ответ 9

Для генерации случайных событий просмотрите случайный модуль

Я бы предложил вам использовать модуль для генерации случайного целого числа, взять его по модулю 2**24 и обработать верхние 8 бит как R, это средний 8 бит как G и нижний 8 как B.
Все это можно выполнить с помощью div/mod или побитовых операций.

Ответ 10

По сути, это даст вам хэштег, случайное преобразование, преобразованное в гекс, и заполнение нулями.

from random import randint
color = '#{:06x}'.format(randint(0, 256**3))
#Use the colors wherever you need!

Ответ 11

hex_digits = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']

digit_array = []

for i in xrange(6):
    digit_array.append(hex_digits[randint(0,15)])
joined_digits = ''.join(digit_array)

color = '#' + joined_digits

Ответ 12

import random

def generate_color():
    color = '#{:02x}{:02x}{:02x}'.format(*map(lambda x: random.randint(0, 255), range(3)))
    return color

Ответ 13

import random

def get_random_hex:
    random_number = random.randint(0,16777215)

    # convert to hexadecimal
    hex_number = str(hex(random_number))

    # remove 0x and prepend '#'
    return'#'+ hex_number[2:]