Класс UColor: изменение яркости и насыщенности цвета
Изменить яркость или насыщенность цвета позволяют следующие методы из класса UColor:
brighter() — создает более яркий цвет;
darker() — создает более темный цвет. Пример:
c = UColor(200, 128, 0)
print(c.brighter())
# UColor(red=238, green=152, blue=0, opacity=255)
print(c.darker())
# UColor(red=161, green=103, blue=0, opacity=255)
saturate() — создает более насыщенный цвет;
desaturate() — создает менее насыщенный цвет. Пример:
c = UColor(110, 135, 60)
print(c.saturate())
# UColor(red=98, green=135, blue=26, opacity=255)
print(c.desaturate())
# UColor(red=121, green=135, blue=93, opacity=255)
derive_color() — создает новый цвет, изменяя параметры текущего цвета. Формат метода:
derive_color(hue_factor, saturation_factor, brightness_factor)
В параметрах hue_factor (фактор для цветового тона), saturation_factor (фактор для насыщенности) и brightness_factor (фактор для яркости) указываются вещественные числа от -1.0 до 1.0. Отрицательные числа уменьшают значения компонентов цвета, а положительные числа — увеличивают значения компонентов цвета. Создадим более темный цвет:
c = UColor(200, 128, 0)
print(c.derive_color(0.0, 0.0, -0.2))
# UColor(red=148, green=95, blue=0, opacity=255)
Нормализация значений
Выполнить нормализацию числовых значений компонентов цвета позволяют следующие статические методы из класса UColor:
normal(value) — выполняет нормализацию целочисленного значения в диапазоне от 0 до 255. Если указанное значение не является числом, то генерируется исключение. Пример:
print(UColor.normal(0)) # 0
print(UColor.normal(-20)) # 0
print(UColor.normal(128)) # 128
print(UColor.normal(255)) # 255
print(UColor.normal(300)) # 255
normal_float(value) — выполняет нормализацию вещественного значения в диапазоне от 0.0 до 1.0. Если указанное значение не является числом, то генерируется исключение. Пример:
print(UColor.normal_float(0.0)) # 0.0
print(UColor.normal_float(-0.2)) # 0.0
print(UColor.normal_float(0.4)) # 0.4
print(UColor.normal_float(1.0)) # 1.0
print(UColor.normal_float(2.0)) # 1.0
Преобразование между диапазонами
Выполнить преобразование диапазонов значений компонентов цвета позволяют следующие статические методы из класса UColor:
int_to_float(value) — выполняет нормализацию целочисленного значения в диапазоне от 0 до 255 и преобразует значение в диапазон от 0.0 до 1.0. Если указанное значение не является числом, то генерируется исключение. Пример:
print(UColor.int_to_float(0)) # 0.0
print(UColor.int_to_float(-20)) # 0.0
print(UColor.int_to_float(128)) # 0.5019607843137255
print(UColor.int_to_float(255)) # 1.0
print(UColor.int_to_float(300)) # 1.0
float_to_int(value) — выполняет нормализацию вещественного значения в диапазоне от 0.0 до 1.0 и преобразует значение в диапазон от 0 до 255. Если указанное значение не является числом, то генерируется исключение. Пример:
print(UColor.float_to_int(0.0)) # 0
print(UColor.float_to_int(-0.2)) # 0
print(UColor.float_to_int(0.5)) # 127
print(UColor.float_to_int(1.0)) # 255
print(UColor.float_to_int(2.0)) # 255
Статические методы для работы с кортежами
Класс UColor содержит следующие статические методы, работающие с кортежами:
hex_to_rgb(<Строка>) — позволяет указать цвет в виде строки, состоящей из шестнадцатеричных значений. Например: "#ffffff", "#fff". Метод возвращает кортеж из 3-х значений (red, green, blue) в диапазоне от 0 до 255. Пример:
print(UColor.hex_to_rgb("#fff")) # (255, 255, 255)
print(UColor.hex_to_rgb("#00ffff")) # (0, 255, 255)
Если строка содержит ошибки, то метод вернет черный цвет:
print(UColor.hex_to_rgb("#fffps")) # (0, 0, 0)
rgb_to_hex(red, green, blue) — возвращает значение в виде строки, состоящей из шестнадцатеричных значений. Например: "#ffffff". Пример:
print(UColor.rgb_to_hex(255, 255, 255)) # #ffffff
print(UColor.rgb_to_hex(0, 255, 255)) # #00ffff
arr = [0, 255, 255]
print(UColor.rgb_to_hex(*arr)) # #00ffff
hex_to_rgba(<Строка>) — позволяет указать цвет в виде строки, состоящей из шестнадцатеричных значений. Например: "#ffffff", "#fff". Метод возвращает кортеж из 4-х значений (red, green, blue, opacity) в диапазоне от 0 до 255. Пример:
print(UColor.hex_to_rgba("#fff")) # (255, 255, 255, 255)
print(UColor.hex_to_rgba("#00ffff")) # (0, 255, 255, 255)
Если строка содержит ошибки, то метод вернет черный цвет:
print(UColor.hex_to_rgba("#fffps")) # (0, 0, 0, 255)
name_to_rgba(<Строка>) — позволяет указать название цвета в виде строки. Метод возвращает кортеж из 4-х значений (red, green, blue, opacity) в диапазоне от 0 до 255. Пример:
print(UColor.name_to_rgba("green")) # (0, 128, 0, 255)
print(UColor.name_to_rgba("жёлтый")) # (255, 255, 0, 255)
Пример указания прозрачного цвета:
print(UColor.name_to_rgba("transparent")) # (0, 0, 0, 0)
print(UColor.name_to_rgba("прозрачный")) # (0, 0, 0, 0)
Если цвет не найден, то метод вернет черный цвет:
print(UColor.name_to_rgba("abc")) # (0, 0, 0, 255)
rgb_to_grayscale(<Кортеж>) — создает серый цвет на основе кортежа из 3-х составляющих (red, green, blue) в диапазоне от 0 до 255.. Пример:
print(UColor.rgb_to_grayscale( (0, 128, 0) )) # 75
rgb_to_grayscale_average(<Кортеж>) — создает серый цвет на основе кортежа из 3-х составляющих (red, green, blue) в диапазоне от 0 до 255.. Вычисляется среднее значение. Пример:
print(UColor.rgb_to_grayscale_average( (0, 128, 0) )) # 42
rgb_to_grayscale_saturate0(<Кортеж>) — создает серый цвет на основе кортежа из 3-х составляющих (red, green, blue) в диапазоне от 0 до 255.. Насыщенность цвета становится равна 0. Пример:
print(UColor.rgb_to_grayscale_saturate0( (0, 128, 0) )) # 128
interpolate_rgb(start_value, end_value, t) — создает промежуточные цвета между цветом start_value и цветом end_value в зависимости от значения параметра t (вещественное число от 0.0 до 1.0). В первых двух параметрах указываются кортежи из 3-х составляющих (red, green, blue) в диапазоне от 0 до 255. Пример создания промежуточных цветов между черным и белым цветом:
b = (0, 0, 0)
w = (255, 255, 255)
print(UColor.interpolate_rgb(b, w, 0.2)) # (51, 51, 51)
print(UColor.interpolate_rgb(b, w, 0.5)) # (127, 127, 127)
print(UColor.interpolate_rgb(b, w, 0.8)) # (204, 204, 204)
print(UColor.interpolate_rgb(b, w, 1.0)) # (255, 255, 255)
RGB2HSV(<Кортеж>) — создает цвет на основе кортежа из 3-х составляющих (red, green, blue) в диапазоне от 0 до 255 и возвращает кортеж из 3-х составляющих (hue, saturation, brightness) цветовой модели HSV (HSB). Компонент hue (значение от 0.0 до 1.0) определяет цветовой тон, saturation (значение от 0.0 до 1.0) — насыщенность, brightness (значение от 0.0 до 1.0) — яркость. Пример:
print(UColor.RGB2HSV( (255, 0, 0) )) # (0.0, 1.0, 1.0)
HSV2RGB(<Кортеж>) — создает цвет в цветовой модели RGB на основе кортежа из 3-х составляющих (hue, saturation, brightness) цветовой модели HSV (HSB). Компонент hue (значение от 0.0 до 1.0) определяет цветовой тон, saturation (значение от 0.0 до 1.0) — насыщенность, brightness (значение от 0.0 до 1.0) — яркость. Метод возвращает кортеж из 3-х составляющих (red, green, blue) в диапазоне от 0 до 255. Пример:
print(UColor.HSV2RGB( (0.0, 1.0, 1.0) )) # (255, 0, 0)
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage
|