Как я могу затемнить / осветлить цвет RGB - PullRequest
1 голос
/ 25 февраля 2020

Итак, я пытаюсь сделать цветовой градиент, от цветного до полностью черного, а также от цветного до полностью белого.

Итак, скажем, у меня есть (175, 250, 255), и я хочу затемнить это окрасить ровно 10 раз до (0, 0, 0), как я могу это сделать? Я также хотел бы украсить цвет, поэтому я бы хотел украсить его ровно в 10 раз и закончить на (255, 255, 255).

Ответы [ 4 ]

2 голосов
/ 25 февраля 2020

Примерно так:

def interpolate(color_a, color_b, t):
    # 'color_a' and 'color_b' are RGB tuples
    # 't' is a value between 0.0 and 1.0
    # this is a naive interpolation
    return tuple(int(a + (b - a) * t) for a, b in zip(color_a, color_b))

def main():

    color_a = (175, 250, 255)
    color_b = (0, 0, 0)

    number_of_steps = 10

    colors = [interpolate(color_a, color_b, t/number_of_steps) for t in range(number_of_steps+1)]
    for color in colors:
        print(color)

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

Вывод:

(175, 250, 255)
(157, 225, 229)
(140, 200, 204)
(122, 175, 178)
(105, 150, 153)
(87, 125, 127)
(70, 100, 102)
(52, 75, 76)
(35, 50, 51)
(17, 25, 25)
(0, 0, 0)
2 голосов
/ 25 февраля 2020

Возможно, здесь поможет принятый ответ на тот же вопрос пользователем Peter O. При заданном значении RGB, как мне создать оттенок (или оттенок)? .

Среди нескольких вариантов затенения и тонирования:

Для оттенков умножьте каждый компонент на 1/4, 1/2, 3/4 и т. Д. c. предыдущее значение Чем меньше коэффициент, тем темнее оттенок.

Для оттенков рассчитайте (255 - предыдущее значение), умножьте его на 1/4, 1/2, 3/4 и т. Д. c. (чем больше коэффициент, тем светлее оттенок), и добавьте его к предыдущему значению (при условии, что каждый компонент сайта является 8-разрядным целым числом).

Обратите внимание, что цветовые манипуляции (такие как оттенки и другие оттенки) должно быть сделано в линейном RGB. Однако цвета RGB, указанные в документах или закодированные в изображениях и видео, вряд ли будут иметь линейный RGB, и в этом случае необходимо применить так называемую обратную функцию передачи для каждого из компонентов цвета RGB. Эта функция зависит от цветового пространства RGB. Например, в цветовом пространстве sRGB (которое можно предположить, если цветовое пространство RGB неизвестно), эта функция примерно эквивалентна повышению каждого компонента цвета sRGB (в диапазоне от 0 до 1) до степени 2,2. (Обратите внимание, что «линейный RGB» не является цветовым пространством RGB.)

См. Также комментарий Violet Giraffe о «гамма-коррекции».

0 голосов
/ 25 февраля 2020

Не могли бы вы уменьшить каждое значение на 10% в десять раз? Например, ваши цвета будут:

175 250 255
157 225 229
140 200 204
122 175 178
105 150 153
87 125 127
70 100 102
52 75 76
35 50 51
17 25 25
0 0 0
0 голосов
/ 25 февраля 2020

Много способов решить этот. Одной из идей было бы найти разницу между вашим текущим значением и целевым значением и разделить ее на 10.

Так что разница (175, 250, 255) до (0, 0, 0) равна (175, 250, 255), а затем разделить это на десять, чтобы получить то, что Вы должны вычесть каждый из десяти шагов. Так что вычитайте (-17.5, -25, -25.5) каждый шаг, округляя при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...