Paper.js предоставляет мощные инструменты для работы с цветом, позволяя создавать насыщенные графические объекты, управлять прозрачностью, градиентами и динамически изменять цвета элементов на канвасе. Основной класс для работы с цветом — Color, который поддерживает различные способы задания цвета и предоставляет методы для преобразований и вычислений.
Цвет можно задавать несколькими способами:
var circle = new Path.Circle(new Point(50, 50), 40);
circle.fillColor = 'red';
Paper.js распознает стандартные CSS-имена цветов.
var rectangle = new Path.Rectangle(new Point(10, 10), new Size(80, 50));
rectangle.fillColor = new Color(0.2, 0.5, 0.8); // значения от 0 до 1
Здесь параметры (r, g, b) задают интенсивность красного,
зелёного и синего каналов.
var path = new Path.Circle(new Point(100, 100), 50);
path.fillColor = new Color(1, 0, 0, 0.5); // красный с прозрачностью 50%
Последний параметр — это альфа-канал, который определяет прозрачность элемента.
var color = new Color();
color.hue = 180; // оттенок (0–360)
color.saturation = 0.5;
color.brightness = 0.7;
HSB-подход удобен для генерации цветовых переходов и динамического изменения цвета по циклам.
Прозрачность задаётся через свойство alpha объекта Color
или через четвёртый параметр при создании цвета:
var semiTransparent = new Color(0.1, 0.2, 0.3, 0.4);
console.log(semiTransparent.alpha); // 0.4
Прозрачность влияет на отображение элементов при наложении друг на друга, позволяя создавать сложные визуальные эффекты.
Paper.js поддерживает два типа градиентов: LinearGradient (линейный) и RadialGradient (радиальный).
Линейный градиент
var gradient = new Gradient(['red', 'yellow', 'green']);
var linear = new Color(gradient, new Point(0, 0), new Point(100, 0));
rectangle.fillColor = linear;
Gradient принимает массив цветов или массив
объектов {color: Color, offset: number}.offset определяет позицию цвета в градиенте от 0 до
1.Радиальный градиент
var radialGradient = new Gradient([
{ color: 'white', offset: 0 },
{ color: 'blue', offset: 1 }
]);
var radial = new Color(radialGradient, new Point(75, 75), new Point(75, 75));
circle.fillColor = radial;
Центр градиента задаётся первой точкой, вторая — радиус (или точка окончания градиента).
Объект Color предоставляет методы для динамического изменения оттенка, насыщенности и яркости:
var color = new Color('orange');
color.lighten(0.2); // делает цвет светлее на 20%
color.darken(0.1); // делает цвет темнее на 10%
color.saturate(0.3); // увеличивает насыщенность на 30%
color.desaturate(0.5); // уменьшает насыщенность на 50%
var inverted = color.inverted(); // возвращает противоположный цвет
Эти методы удобны для анимации цвета или создания адаптивных визуальных эффектов.
Для плавных переходов между цветами используется метод tweening:
var path = new Path.Circle(new Point(150, 150), 40);
path.fillColor = 'red';
var start = new Color('red');
var end = new Color('blue');
var step = 0;
view.onFr ame = function(event) {
step += 0.01;
path.fillColor = start.mix(end, step); // смешивание цветов
if(step >= 1) step = 0;
};
Метод mix позволяет создавать плавные градации между двумя цветами, задавая коэффициент смешивания от 0 до 1.
Для генерации визуально сложных объектов удобно использовать массивы цветов:
var colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00'];
for (var i = 0; i < 4; i++) {
var rect = new Path.Rectangle(new Point(i * 50, 0), new Size(50, 50));
rect.fillColor = colors[i];
}
Можно также динамически создавать градиенты на основе этих массивов.
Paper.js предоставляет универсальный класс Color, поддерживающий различные модели (RGB, HSB), прозрачность, градиенты и методы для преобразований. Он интегрирован с анимацией и позволяет создавать как статические, так и динамически изменяющиеся цвета, обеспечивая высокую гибкость при работе с визуальными объектами на канвасе.