说说在 Canvas 中如何填充渐变颜色
渐变颜色填充方式有两种:线性或径向。
- 线性渐变填充会创建一个水平 、 垂直或者对角线的填充图案。
- 径向渐变填充会自中心点创建一个放射状填充图案。
1 线性渐变
1.1 线性水平渐变
(1)基本形状
Steve Fulton 与 Jeff Fulton 举了一个示例,来说明如何设置线性水平渐变。
//创建渐变对象
var gr = context.createLinearGradient(0, 0, 100, 0);//颜色断点
gr.addColorStop(0, 'rgb(255,0,0)');
gr.addColorStop(.5, 'rgb(0,255,0)');
gr.addColorStop(1, 'rgb(255,0,0)');//设置渐变
context.fillStyle = gr;//绘制矩形
context.fillRect(0, 0, 100, 100);
运行结果:
首先使用 context 的 createLinearGradient() 来创建渐变对象。语法为:context.createLinearGradient(x0,y0,x1,y1);
参数 | 描述 |
---|---|
x0 | 渐变开始点的 x 坐标 |
y0 | 渐变开始点的 y 坐标 |
x1 | 渐变结束点的 x 坐标 |
y1 | 渐变结束点的 y 坐标 |
Linear /ˈlɪniə®/
Of, relating to, or resembling a line; straight.
gradient /ˈɡreɪdiənt/
Physics The rate at which a physical quantity, such as temperature or pressure, changes relative to change in a given variable, especially distance.
四个入参都是坐标,目的是确定渐变的范围。
注意:因为需要创建的是一个水平渐变,所以 y 值都是 0。
渐变对象创建好之后,就可以设置色标。语法:gradient.addColorStop(stop,color);
参数 | 描述 |
---|---|
stop | 介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置。 |
color | 在结束位置显示的 CSS 颜色值 |
可以多次调用 addColorStop() 方法来改变渐变。
比如示例代码中设置的渐变是起点 (0) 为红色 、 中心点 (0.5) 为绿色 、 终点 (1)为红色。所以最后的效果是出现一个 “ 红-绿-红 ” 渐变颜色。
为了说明渐变对象的影响范围,我们再添加两个矩形,一个窄,一个宽。
context.fillRect(0, 100, 50, 100);
context.fillRect(0, 200, 200, 100);
渲染结果:
从渲染结果中可以看出,只要有形状在水平渐变的垂直区域内,就会渲染出水平渐变效果。
综合运用这些方法,就可以做出非凡的彩虹效果。
var gr = context.createLinearGradient(0, 0, 300, 0);gr.addColorStop(0, '#fff');
gr.addColorStop(0.15, '#8B00FF');
gr.addColorStop(0.25, '#0000FF');
gr.addColorStop(0.35, '#00FFFF');
gr.addColorStop(0.45, '#00FF00');
gr.addColorStop(0.55, '#FFFF00');
gr.addColorStop(0.65, '#FF7F00');
gr.addColorStop(0.75, '#FF0000');
gr.addColorStop(1, '#fff');//生成渐变
context.fillStyle = gr;context.fillRect(0, 0, 300, 300);
运行结果:
(2)边框
也可以对形状的边框应用渐变颜色。
var gr = context.createLinearGradient(0, 0, 100, 0);
gr.addColorStop(0, 'rgb(255,0,0)');
gr.addColorStop(.5, 'rgb(0,255,0)');
gr.addColorStop(1, 'rgb(255,0,0)');context.strokeStyle=gr;
context.strokeRect(0,0,100,100);
context.strokeRect(0,100,50,100);
context.strokeRect(0,200,200,100);
运行结果:
这里的示例代码与之前示例的区别是:先把 strokeStyle 设置为渐变对象,接着调用 strokeRect() 来绘制边框。
stroke /strəʊk/
v.
To mark with a single short line.
(3)特殊形状
由点组成、封闭的特殊形状,也可以填充渐变颜色。只要形状的起止点相同,就是封闭的。
var gr = context.createLinearGradient(0, 0, 100, 0);gr.addColorStop(0, 'rgb(255,0,0)');
gr.addColorStop(.5, 'rgb(0,255,0)');
gr.addColorStop(1, 'rgb(255,0,0)');context.fillStyle = gr;context.beginPath();
context.moveTo(0, 0);
context.lineTo(50, 0);
context.lineTo(100, 50);
context.lineTo(50, 100);
context.lineTo(0, 100);
context.lineTo(0, 0);context.stroke();
context.fill();
context.closePath();
运行结果:
1.2 线性垂直渐变
(1)形状
线性垂直渐变与水平渐变类似,只不过 createLinearGradient() 中的 x 都为 0。
var gr = context.createLinearGradient(0, 0, 0, 300);gr.addColorStop(0, '#fff');
gr.addColorStop(0.15, '#8B00FF');
gr.addColorStop(0.25, '#0000FF');
gr.addColorStop(0.35, '#00FFFF');
gr.addColorStop(0.45, '#00FF00');
gr.addColorStop(0.55, '#FFFF00');
gr.addColorStop(0.65, '#FF7F00');
gr.addColorStop(0.75, '#FF0000');
gr.addColorStop(1, '#fff');context.fillStyle = gr;context.fillRect(0, 0, 300, 300);
运行结果:
(2)边框
线性垂直渐变也可以应用与边框。
var gr = context.createLinearGradient(0, 0, 0, 100);
gr.addColorStop(0, 'rgb(255,0,0)');
gr.addColorStop(.5, 'rgb(0,255,0)');
gr.addColorStop(1, 'rgb(255,0,0)');context.strokeStyle = gr;context.beginPath();
context.moveTo(0, 0);
context.lineTo(50, 0);
context.lineTo(100, 50);
context.lineTo(50, 100);
context.lineTo(0, 100);
context.lineTo(0, 0);context.stroke();
context.closePath();
运行结果:
(3)对角线
createLinearGradient() 方法中的起始点与终止点成斜 45 度对角,就可以做出对角线的渐变效果。当然也可以做成其它斜度。
var gr = context.createLinearGradient(0, 0, 100, 100);gr.addColorStop(0, 'rgb(255,0,0)');
gr.addColorStop(.5, 'rgb(0,255,0)');
gr.addColorStop(1, 'rgb(255,0,0)');context.fillStyle = gr;
context.beginPath();
context.moveTo(0, 0);
context.fillRect(0, 0, 100, 100);
context.closePath();
运行结果:
2 径向渐变
context 的 createLinearGradient() 方法可以创建放射状的径向渐变对象。
语法:context.createRadialGradient(x0,y0,r0,x1,y1,r1);
参数 | 描述 |
---|---|
x0 | 渐变的开始圆的 x 坐标 |
y0 | 渐变的开始圆的 y 坐标 |
r0 | 开始圆的半径 |
x1 | 渐变的结束圆的 x 坐标 |
y1 | 渐变的结束圆的 y 坐标 |
r1 | 结束圆的半径 |
(1)基本形状
var gr = context.createRadialGradient(50, 50, 25, 50, 50, 100);gr.addColorStop(0, 'rgb(255,0,0)');
gr.addColorStop(.5, 'rgb(0,255,0)');
gr.addColorStop(1, 'rgb(255,0,0)');context.fillStyle = gr;
context.fillRect(0,0,200,200);
运行结果:
示例代码先在点 (50,50) 以半径为 25 长度,画出一个起始圆;接着在点 (50,50) 以半径为 100 长度,画出一个终止圆;最后在它们之间设置径向渐变。
如果终止圆的圆心在起始圆的圆心右下角,就会产生这样的效果。
context.createRadialGradient(50, 50, 25, 100, 100, 100);
(2)其它形状
除了对正方形应用径向渐变,也可以把径向渐变应用于其他形状的图形,比如圆形。
context.arc(100,100,100,(Math.PI/180)*0,(Math.PI/180)*360,false);
context.fill();
其他部分代码与上一例的代码相同。
运行结果:
(3)边框
也可以把径向渐变应用于边框。
context.strokeStyle = gr;context.arc(100,100,50,(Math.PI/180)*0,(Math.PI/180)*360,false);
context.stroke();
其他部分代码与上一例的代码相同。
运行结果:
这里的圆会比前面示例中的圆小一半,这样才能得到径向渐变效果。
综合运用以上知识点,可以做出让人惊叹的效果。
var gr = context.createRadialGradient(50, 50, 25, 100, 100, 100);gr.addColorStop(0, '#fff');
gr.addColorStop(0.15, '#8B00FF');
gr.addColorStop(0.25, '#0000FF');
gr.addColorStop(0.35, '#00FFFF');
gr.addColorStop(0.45, '#00FF00');
gr.addColorStop(0.55, '#FFFF00');
gr.addColorStop(0.65, '#FF7F00');
gr.addColorStop(0.75, '#FF0000');
gr.addColorStop(1, '#fff');context.fillStyle = gr;
context.fillRect(0, 0, 200, 200);
运行结果:
说说在 Canvas 中如何填充渐变颜色相关推荐
- ai怎么渐变颜色_AI中怎么调渐变颜色
AI中怎么调渐变颜色?下面是一篇关于AI中调渐变颜色的教程,希望对新手朋友有所帮助吧! 首先,我们来看看效果图: 步骤如下: 1.打开一个带有渐变背景的素材.现在我们希望在不改变背景色调关系的情况下, ...
- html中怎么设置渐变颜色设置,css中渐变色怎么设置
这篇文章主要介绍了css3编写浏览器背景渐变背景色的方法,现在分享给大家,也给大家做个参考. css中渐变色怎么设置 css 给网页中的背景设置渐变色,css的渐变颜色可以指定固定的两个颜色之间的线性 ...
- html5 canvas文字颜色,我可以通过HTML5 Canvas中的字符文本颜色来做吗?
我告诉你这个解决方法.基本上你一次输出一个字符,并使用内置的measureText()函数来确定每个字母的宽度.然后我们将我们想要绘制的位置偏移相同的数量.您可以修改此代码段,以产生所需的效果. 假设 ...
- html中如何使用渐变颜色代码,html – 如何在CSS中使用渐变作为字体颜色?
您可以使用位于彼此顶部的多个跨度,并为其中的每一个分配不同的高度和颜色.它真的很丑的编码明智,但它的作品. http://jsfiddle.net/7yBNv/ 文本选择行为有点时髦,但不是太糟糕.并 ...
- html5怎么转换,HTML5 canvas中的转换方法
转换方法 scale(scalewidth,scaleheight) 缩放当前绘图至更大或更小 scalewidth 缩放当前绘图的宽度 (1=100%, ...
- ai怎么渐变颜色_AI教程!渐变色噪点质感城堡场景插画绘制过程分享
教程步骤 步骤 01 分析绘制思路,将插画分成背景+主体部分(云.山.树林.城堡.地面.湖面). 步骤 02 在AI里新建一个800*600px的画板 接着用矩形工具画一个与画板大小一样的矩形并填充渐 ...
- canvas中如何设置渐变色
CanvasGradient在canvas中是专门设置颜色渐变的一个类.它分为两种,一种是createLinearGradient(),即线性渐变:另一种是createRadialGradient() ...
- html渐变颜色填充,在画布形状中填充渐变色
您也可以在画布形状内填充渐变色.渐变只是从一种颜色到另一种颜色的平滑视觉过渡.有两种类型的渐变可用:线性渐变和径向渐变. 创建线性渐变的基本语法可以通过以下方式给出: var grd = contex ...
- html5中阴影,HTML5 Canvas 中的颜色、样式和阴影的属性和方法
颜色.样式和阴影的属性与方法 fillStyle 设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle 设置或返回用于笔触的颜色.渐变或模式 ...
最新文章
- C++中const char*, string 与char*的转化
- 详解C#break ,continue, return
- 【DevOps+LIVE】直播复盘 – DevOps能力成长模型2018首发
- 随机森林和gbdt结合_决策树与迭代决策树(GBDT)
- 修改了模板文件tpl如何立即生效_Views视图与模板
- 中国风海报设计必备的墨染素材!点睛国潮风!
- Whitelabel Error Page : spring boot项目启动后,无法访问@RequestMapping标注的请求
- description方法 oc 就是NSLog使用
- 如何在 Azure 虚拟机里配置条带化
- ulimit和core文件的使用方法
- 〖Python APP 自动化测试实战篇①〗 - 大话闲扯 APP 自动化
- Protus 8.6 及以上如何找到library文件夹
- cimfax显示无法连接到服务器,CimFAX传真机软件
- 统一身份认证系统方案
- 2022茶艺师(中级)考试题及答案
- pytorch模型加密
- 洛谷P1427 小鱼的数字游戏
- NO.3 微信第三方平台代创建小程序审核发布以及小程序信息(头像,名称,简介)修改 以及微信错误码 返回信息
- Excel隔行插入空白行小技巧
- mysql存储用户昵称_mysql 微信用户昵称 emoji 完整保存 - 人人都是架构师
热门文章
- 2020贵州公务员考试报考指南:如何选择学习资料
- centos 6.5 部署 oracle 11G RAC+DG-------RAC-单实例部署DG部分(二)
- matlab 正版贵吗,有人使用正版MATLAB吗?
- 浅谈初中英语教学中如何激发学生的学习兴趣
- Termux安卓高级终端设置
- 用Python头像秒变成表情包
- 综合64位win10系统无法安装.Net framework3.5或出现“Error: 0x800f0922”
- 海康威视访客案例说明
- 爬取淘宝交易记录的爬虫
- 基于AI的图像处理软件——项目总结