Имя: Пароль:
IT
Веб-мастеринг
Как на самом деле работает linear-gradient в CSS ? Математическая формула какая?
,
0 Шоколадная страсть
 
25.03.21
21:55
Решил начать изучать веб-программирования. Сейчас на этапе изучения стилей CSS. Не могу понять как работает этот linear-gradient с точки зрения расчетов. Какая математическая модель?
Как на самом деле работает linear-gradient в CSS?

Вот пример:

Начальная точка имеет цвет (255, 255, 255, 1), конечная точка имеет цвет (0, 0, 0, 0), какой цвет должен получиться в самой середине между этими двумя крайними точками?
В интернете так и не смог найти правильный ответ. Везде пишут какие-то формулы, которые не соответствуют действительности.
1 palsergeich
 
25.03.21
22:43
https://developer.mozilla.org/ru/docs/Web/CSS/linear-gradient()
Дока от мозилы не катит?
2 Шоколадная страсть
 
25.03.21
22:49
(1) Раз там нет ответа на мой вопрос, значит не катит.
3 Михаил Козлов
 
25.03.21
22:57
Может (255/2, 255/2, 255/2, 1/2)?
4 Asmody
 
25.03.21
22:58
можешь посмотреть в исходниках хромиума https://chromium.googlesource.com/chromium/src
5 mistеr
 
25.03.21
23:12
(0) Спецификация CSS не регламентирует формулу, поэтому реализации могут отличаться (и отличаются).

Если же отвязаться от CSS, то ответы нужно искать в учебниках по комп. графике, либо в документации к популярным библиотекам (Skia, Cairo, AGG и т.д.). Насколько я (смутно) помню, наилучшие в визуальном плане результаты дает интерполяция не в RGB пространстве, а в каком-то другом, более подходящем.
6 Шоколадная страсть
 
25.03.21
23:57
(3) По логике да, так должно быть, но по факту получается (255, 255, 255, 1/2). Почему он так делает, не понятно.
7 Шоколадная страсть
 
25.03.21
23:57
(5) Наверное в sRGB, про него часто пишут.
8 Шоколадная страсть
 
26.03.21
06:09
Уп!
9 Шоколадная страсть
 
26.03.21
16:58
Пип!
10 Вафель
 
26.03.21
17:09
зачем тебе это? работает и достаточно
11 Шоколадная страсть
 
26.03.21
19:30
(10) Чтобы работало как ожидается. А то сделаешь как думаешь что оно должно работать, а оно работает по другому. И не понятно как нужно было правильно, приходится методом тыка или гуглить у кого такие же проблемы были
12 Шоколадная страсть
 
26.03.21
20:08
Никто не в курсе? Ну ладно, сам разберусь, как всегда.
13 s-n-a-y
 
27.03.21
10:56
Доков не читал, но можно предположить что четвертый параметр регулирует смещение оттенка цвета
14 Василий Алибабаевич
 
27.03.21
11:13
(0) Здесь : https://stackoverflow.com/questions/22607043/color-gradient-algorithm/39924008#39924008 немного теории и готовые алгоритмы.
15 sikuda
 
27.03.21
11:35
16 Василий Алибабаевич
 
27.03.21
12:10
+ (14) Во всех вот этих ваших интернетах пишут так :

(255,0,0) + (0,0,255)  =  ((255+0) div 2,(0+0) div 2,(0+255) div 2)=(127,0,127).
17 Шоколадная страсть
 
28.03.21
07:57
(14) Похоже на правду. Но что-то слишком сложные формулы, со всякими условиями и возведением в степень. Не должно быть так.
18 Шоколадная страсть
 
28.03.21
07:59
(16) Не то, там не учитывается прозрачность.
Должно быть так:
(255, 255, 255, 1) + (0, 0, 0, 0) = (255, 255, 255, 1/2)
Может показаться что это бред какой-то, но так правильно.
19 vde69
 
28.03.21
11:12
Почитай про проблему цвета при работе с картинками.
Там реально единой формулы нет. Есть куча библиотек и все работают по разному.

Градиент это частный случай проблемы преобразования цветов.

А самое страшное, что один и тот же цвет можно получить несколькими вариантами,
То есть единственного решения не существует в принцепе
20 Вафель
 
28.03.21
14:33
(19) это как это в ргб 1 цвет можно получить несколькими вариантами?
можно пример?
21 acanta
 
28.03.21
14:36
Вероятно имеется ввиду полином как какой-то степени...
22 Шоколадная страсть
 
28.03.21
18:37
(19) Действительно, вариантов куча, и каждый браузер делает по своему. Проще готовую картинку загрузить, чем с этими дурацкими формулами CSS разбираться.
23 Турбо Дизель
 
29.03.21
05:07
(0) Вот ты тупой. Формула элементарная:

С = (С1 * A1 * x + C2 * A2 * (1 - x)) * 2 / (A1, A2)

Где C - это компонента цвета (R или G или B), а А - это компонента прозрачности. х - это координата межу начальной и конечной точкой, от 0 до 1.
24 vde69
 
29.03.21
17:25
(20) начнем с того, что есть понятие "глубина цвета" (есть 24 бит, есть 32 бита, есть 48 бит есть и поболее) в рамках этой "глубины" каждая конкретная картинка имеет некую точку отсчета и далее от нее считаются цвета.

На 1 цвет для 1 точке может требоватся разное количество бит, то есть #F00F для 24 битов и для 32 битов означают разное...

Еще есть понятие "альфа канал", очень условно это начало системы координат цветовой палитры.

Короче вариантов просто очень большое...

Ну по поводу множественности для одного цвета - такое реально существует и вызывает большие проблеммы
25 Генератор
 
29.03.21
17:41
Если я правильно понимаю то прозрачность определяет как цвет смешается с цветом родителя / подложки.
Т.е. цвет данного конкретного пикселя будет зависеть не только от функции градиента но и от того что под этим градиентом.
26 Моновпрыск
 
29.03.21
18:12
(25) В данном случае цвет родителя не рассматривается, нужно найти только RGBA компоненты цвета слоя, что само по себе не просто и не однозначно. Конечный цвет после наложения - это уже отдельный разговор.