Skip to content

Commit 455a962

Browse files
committed
v.1.0.0
1 parent 1d56651 commit 455a962

File tree

5 files changed

+842
-1
lines changed

5 files changed

+842
-1
lines changed

README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,95 @@
11
# Gradient
2-
Class to create linear, radial, elliptical and conic gradients as bitmaps, even without canvas
2+
3+
Class to create **linear, radial, elliptical and conic gradients** as bitmaps, even without canvas
4+
5+
**version 1.0.0** (9 kB minified)
6+
7+
Example:
8+
9+
```javascript
10+
const w = 200, h = 200;
11+
12+
function addColorStops(gradient)
13+
{
14+
const colors = ['red', 'yellow', 'green', 'blue'];
15+
const stops = [0.0, 0.33, 0.66, 1.0];
16+
stops.forEach((s, i) => {
17+
gradient.addColorStop(s, colors[i]);
18+
});
19+
return gradient;
20+
}
21+
function applyGradient(gradient1, canvas1, gradient2, canvas2)
22+
{
23+
addColorStops(gradient1);
24+
addColorStops(gradient2);
25+
const ctx1 = canvas1.getContext("2d");
26+
ctx1.fillStyle = gradient1;
27+
ctx1.fillRect(0, 0, w, h);
28+
const ctx2 = canvas2.getContext("2d");
29+
const imData = ctx2.createImageData(w, h);
30+
imData.data.set(gradient2.getBitmap(w, h));
31+
ctx2.putImageData(imData, 0, 0);
32+
}
33+
function drawLinearGradient(x1, y1, x2, y2)
34+
{
35+
const canvas1 = document.getElementById('linear1');
36+
const canvas2 = document.getElementById('linear2');
37+
applyGradient(
38+
canvas1.getContext("2d").createLinearGradient(x1, y1, x2, y2),
39+
canvas1,
40+
Gradient.createLinearGradient(x1, y1, x2, y2),
41+
canvas2
42+
);
43+
}
44+
function drawRadialGradient(x1, y1, r1, x2, y2, r2)
45+
{
46+
const canvas1 = document.getElementById('radial1');
47+
const canvas2 = document.getElementById('radial2');
48+
applyGradient(
49+
canvas1.getContext("2d").createRadialGradient(x1, y1, r1, x2, y2, r2),
50+
canvas1,
51+
Gradient.createRadialGradient(x1, y1, r1, x2, y2, r2),
52+
canvas2
53+
);
54+
}
55+
function drawEllipticGradient(cx, cy, rx, ry, angle)
56+
{
57+
const canvas1 = document.getElementById('elliptic1');
58+
const canvas2 = document.getElementById('elliptic2');
59+
const ctx = canvas1.getContext("2d");
60+
const r = Math.max(rx, ry), sx = rx/r, sy = ry/r;
61+
applyGradient(
62+
canvas1.getContext("2d").createRadialGradient(cx/sx, cy/sy, 0, cx/sx, cy/sy, r),
63+
canvas1,
64+
Gradient.createEllipticGradient(cx, cy, rx, ry, /*angle*/0),
65+
canvas2
66+
);
67+
ctx.scale(sx, sy);
68+
/*ctx.translate(-cx/sx, -cy/sy);
69+
ctx.rotate(angle);
70+
ctx.translate(cx/sx, cy/sy);*/
71+
ctx.fillRect(0, 0, w/sx, h/sy);
72+
}
73+
function drawConicGradient(angle, cx, cy)
74+
{
75+
const canvas1 = document.getElementById('conic1');
76+
const canvas2 = document.getElementById('conic2');
77+
applyGradient(
78+
canvas1.getContext("2d").createConicGradient(angle, cx, cy),
79+
canvas1,
80+
Gradient.createConicGradient(angle, cx, cy),
81+
canvas2
82+
);
83+
}
84+
85+
drawLinearGradient(20, 20, w - 20, h - 20);
86+
drawRadialGradient(100, 100, 10, 160, 120, 80);
87+
drawEllipticGradient(100, 100, 100, 40, Math.PI/4);
88+
drawConicGradient(Math.PI/4, 60, 80);
89+
```
90+
91+
![gradients example](/screenshot.png)
92+
93+
**see also**
94+
95+
* [css-color](https://github.com/foo123/css-color) simple class to parse and manipulate colors in various formats

screenshot.png

84.1 KB
Loading

0 commit comments

Comments
 (0)