canvas渐变色 - Kaiqisan

canvas渐变色

一般用于在使用填充方法的时候使用,是一种特殊的填充,因为它是渐变色的。

关键代码

createLinearGradient(x1, y1, x2, y2): 这里创建一个渐变的样式,定义了渐变的整体走向,x1, y1是渐变的开始点,x2, y2是渐变的结束点。

addColorStop(step, color): 设置渐变的颜色和颜色的变化,第一个参数值为0–1任意值,为渐变路线0为渐变起点,1为渐变终点。如果对于路径不是很理解的话我们建议您复制粘贴下面的代码然后自己修改参数写一遍。如果您做过css动画的话就会对这个0–1拥有更好的理解

let gra = ctx.createLinearGradient(0, 0, 0, 300) // 创建一个渐变样式
gra.addColorStop(0, '#ffffff') // path
// ....
gra.addColorStop(0.5, 'blue')
// ....
gra.addColorStop(1, 'lightpink')
ctx.fillStyle = gra // 最后通过fillStyle的形式填充
// 后面请任意使用填充方法。

下图可以让您更容易理解渐变的具体细节,请谨慎大胆地使用它(不是)。

gradient

createRadialGradient(x1, y1, r1, x2, y2, r2): 中心辐射渐变,它的渐变可以看做从一个点开始向周围变换颜色。这里前三个参数表示渐变起始圆的信息,分别为x坐标,y坐标,半径,后三个参数表示终止圆的信息。

这里的参数填写是有讲究的,一般我们都是使两个圆的圆心相互重合,这样绘制出来的才是正宗的中心辐射渐变

center

如果出现两个圆心不相等的情况的时候,有可能绘制出来的图案会并不符合我们的预期,下面我们就从原理的角度开始分析。

两个圆如果圆心不一样,它们具有以下关系-----相切,相交,相离和包含关系。下面我们在绘制渐变色图的时候再额外绘制两个参考圆的边框。

包含
inc
inc-2
包含关系,如果起始圆比结束圆小,渐变从起始圆向周围辐射,直到结束圆结束为止。如果起始圆比结束圆大,渐变就从结束圆开始向周围辐射,直到起始圆为止

相交
d-2
d-3
从相交开始,渐变就不载是理想的了,而是如图所示的渐变,建议谨慎使用。

相切
cur
在这里插入图片描述
本质上和相交是一样的,都是找到两条和两个圆共同相切的直线,然后开始在上图范围内开始渐变。

相离
hanare
hanare-2
本质和相交相切一样,不多赘述,看图理解。

源码

	window.onload = () => {
        let canvas = document.getElementById('demo')
        let ctx = canvas.getContext('2d')
		// ctx.save()
		// let gra = ctx.createLinearGradient(0, 0, 500, 300)
		// gra.addColorStop(0, '#FFF2B1')
		// gra.addColorStop(1, '#F59AFF')
		// ctx.fillStyle = gra
		// ctx.fillRect(0, 0, 500, 300)
		// ctx.restore()

		ctx.beginPath()
		// 放射状圆形渐变,由两个参考圆的半径和位置关系共同决定
		ctx.save()
		let gra2 = ctx.createRadialGradient(400, 200, 50, 400, 220, 80)
		gra2.addColorStop(0, '#FFF2B1')
		gra2.addColorStop(1, '#F59AFF')
		ctx.fillStyle = gra2
		ctx.fillRect(0, 0, 1000, 600)
		ctx.restore()

        // 绘制参考圆,可供大家测试
		// ctx.save()
		// ctx.beginPath()
		// ctx.arc(400, 200, 50, 0, 2 * Math.PI,)
		// ctx.stroke()
		//
		// ctx.save()
		// ctx.beginPath()
		// ctx.arc(400, 220, 80, 0, 2 * Math.PI,)
		// ctx.stroke()
    }

总结

渐变是个很好玩的东西,在某些绘制中会有意想不到的结果,也建议后面的辐射绘制把起始圆和终止圆的圆心重合一下,除非你就是想绘制那样的效果的话当我没说!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiqisan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值