canvas多重阴影发光效果

简介: canvas多重阴影发光效果

canvas多重阴影发光效果


前言


在一个项目中,客户提了一个发光的效果,效果图如下:


微信图片_20220425134113.png


阴影


有的人可能会说,这个用阴影其实就可以实现。但是从图中可以看出,是一个比较强烈的发光效果。实际的应用过程中我们会发现用简单阴影参数实现的效果很难达到这样强烈的发光效果。


比如


1ctx.shadowColor = 'rgba(255,0,0,1)';
2  ctx.shadowBlur =10;
3  ctx.shadowOffsetX = 10;
4  ctx.shadowOffsetY = 10;
5
6  ctx.fillStyle = 'rgba(0,0,255,1.0)';
7  ctx.fillRect(100,100,200,100);


微信图片_20220425134118.png


简单的阴影效果下,shadowBlur 表示阴影半径。当阴影半径比较大的时候,阴影的扩散程度会比较大,但阴影的强烈度不够。在阴影的半径比较小的时候,阴影的强烈度是够的,但阴影的扩散程度会比较小。


多重阴影


如何达到具有较强的阴影强度,又有较好的阴影扩散度呢?也就是实现这种比较强烈的发光效果。嗯,答案就是使用多重阴影效果。


所谓多重阴影效果,使用阴影效果对图形进行多次绘制,多次绘制的过程中,shadowBlur的值会不一样,这样可以形成多个阴影叠加的效果。


下面是一个简单的示例,代码如下。


1ctx.shadowColor = 'rgba(255,255,0,1)';
 2  ctx.shadowBlur = 20;
 3  ctx.shadowOffsetX = 10100;
 4  ctx.shadowOffsetY = 10100;
 5
 6  ctx.beginPath();
 7  ctx.fillStyle = 'rgba(0,0,255,1.0)';
 8  ctx.arc(-10000, -10000, 50, 0, Math.PI * 2);
 9  ctx.fill();
10
11  ctx.shadowColor = 'rgba(255,0,0,1)';
12  ctx.shadowBlur = 20;
13  ctx.shadowOffsetX = 10100;
14  ctx.shadowOffsetY = 10100;
15
16  ctx.beginPath();
17  ctx.fillStyle = 'rgba(0,0,255,1.0)';
18  ctx.arc(-10000, -10000, 30, 0, Math.PI * 2);
19  ctx.fill();


从代码中我们可以看出我们多次使用了阴影的绘制啊,最终的绘制效果如下图所示。


微信图片_20220425134122.png


从图中可以看出, 阴影有较好的扩散程度,也有较好的强烈度。


下面是用多重阴影实现的文字霓虹灯效果,同样可以看出有较好的发光效果。


微信图片_20220425134125.png


总结


可以看出要达到强烈的发光效果, 需要使用多重阴影功能。当然使用多种阴影也不是没有限制的, 因为阴影本身有很大的性能损耗。通过尝试我们发现一般3~5次之间就能够达到较好的效果吧。

相关文章
|
Python
解决pyinstaller不兼容python-docx的方法
python-docx是一个python的读写word的库,可以用来读写word文档,向word文档里插入表格,但是与pyinstaller不是原生兼容,需要小改一下
1154 0
解决pyinstaller不兼容python-docx的方法
|
存储 人工智能 弹性计算
阿里云第八代云服务器g8i实例介绍,可适用于在线音视频及AI相关应用
近日,阿里云第八代云服务器ECS g8i实例已经完成全新升级,g8i实例采用CIPU+飞天技术架构,搭载最新的Intel 第五代至强可扩展处理器(代号EMR),性能进一步大幅提升,同时拥有AMX加持的AI能力增强,并在全球范围率先支持TDX机密虚拟机能力,实现了AI增强和全面安全防护的两大特色优势,可适用于在线音视频及AI相关应用。本文对g8i实例做个介绍。
阿里云第八代云服务器g8i实例介绍,可适用于在线音视频及AI相关应用
|
人工智能 数据管理 API
阿里云牵头制定IEEE《行业大模型管理平台标准》,促进行业大模型生态发展
阿里云牵头在IEEE人工智能分委会制定《行业大模型管理平台标准》,旨在规范平台架构、功能及性能评估,解决行业应用中的共识缺失问题。该标准涵盖模型管理与应用工具的关键功能要求,并提供汽车、智能电网和传媒等领域的部署案例指导,以促进平台与行业用户的接口互通。多家企业和研究机构共同参与了标准制定工作,欢迎更多伙伴加入,共促产业发展。
523 9
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
854 1
Px,em,rem的区别
【10月更文挑战第10天】 Px,em,rem的区别
1132 2
|
JavaScript
vue2路由懒加载解决import引入报错问题
本文介绍了在Vue2项目中实现路由懒加载的方法,并解决了使用import语句进行懒加载时报错的问题。通过安装`babel-plugin-syntax-dynamic-import`插件并在项目的`.bablerc`文件中配置,可以成功实现路由组件的按需加载。同时,文章还提到了使用`webpackChunkName`为懒加载的组件指定单独的chunk名称,以避免所有组件被打包到同一个js文件中。
1063 4
|
API
Vue3中的ref和shallowRef、reactive和shallowReactive
Vue3中的ref和shallowRef、reactive和shallowReactive
508 1
|
前端开发
css动画效果(边框流光闪烁阴影效果)
css动画效果(边框流光闪烁阴影效果)
|
XML 移动开发 前端开发
JS设置Ajax为同步或异步
JS设置Ajax为同步或异步
466 0
|
JavaScript
js 获取并解析 url 中参数的三种方法
js 获取并解析 url 中参数的三种方法
2699 0