通过canvas转换颜色为RGBA格式及性能问题的解决


Posted in HTML / CSS onNovember 22, 2019

转换任意颜色为RGBA格式

前端编程过程中,经常会遇到要把各种颜色格式(比如 “red”、“#F00”、“#FF0000”等)转换成RGBA格式,搜索网络也可以发现一堆的解决方案:

通过canvas转换颜色为RGBA格式及性能问题的解决

此处介绍一种方法: 通过canvas的像素获取方法,来获取任意颜色的RGBA数值。大致步骤如下:

  • 首先创建一个尺寸为1*1的canvas,并获取canvas的绘制上下文ctx
  • 设置ctx.fillStyle为指定的颜色
  • 通过ctx.fillRect填充canvas
  • 通过ctx.getImaegeData获取Imagedata对象,并获取其中的像素值,获取的像素值正好是RGBA格式的。

示例代码如下:

function getRgba(color) {
      var canvas = document.createElement("canvas");
      canvas.width = 1;
      canvas.height = 1;
      var ctx = canvas.getContext('2d');
      ctx.fillStyle = color;
      ctx.fillRect(0, 0, 1, 1);
      var colorData = ctx.getImageData(0, 0, 1, 1).data;
      return {
          r: colorData[0],
          g: colorData[1],
          b: colorData[2],
          a: colorData[3]
      };
  }

注意性能问题

需要注意的是,如果上述方法频繁调用,则会有性能问题, 我公司一个小伙伴就出现过这样的性能问题。因为代码在频繁的创建canvas对象, 不断创建对象会有性能损耗,而JavaScript本身还需要在垃圾回收阶段不断的回收这些创建的对象,也是一次性能消耗。

好的处理方式是创建一个全局的canvas对象,每次都复用该对象。只用做很小的改动,参考下面的代码 :

var canvas = document.createElement("canvas");
    canvas.width = 1;
    canvas.height = 1;
   var ctx = canvas.getContext('2d');
function getRgba(color) {
      ctx.fillStyle = color;
      ctx.fillRect(0, 0, 1, 1);
      var colorData = ctx.getImageData(0, 0, 1, 1).data;
      return {
          r: colorData[0],
          g: colorData[1],
          b: colorData[2],
          a: colorData[3]
      };
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
html5 canvas 画图教程案例分析
Nov 23 HTML / CSS
使用HTML5做个画图板的方法介绍
May 03 HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
Jul 19 HTML / CSS
为你的html5网页添加音效示例
Apr 03 HTML / CSS
HTML5 Video标签的属性、方法和事件汇总介绍
Apr 24 HTML / CSS
详解如何用HTML5 Canvas API控制图片的缩放变换
Mar 22 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
Jun 17 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
Jan 29 HTML / CSS
在canvas上实现元素图片镜像翻转动画效果的方法
Mar 20 HTML / CSS
Canvas图片分割效果的实现
Jul 29 HTML / CSS
使用HTML5做的导航条详细步骤
Oct 19 HTML / CSS
CSS完成视差滚动效果
Apr 27 HTML / CSS
HTML5 weui使用笔记
Nov 21 #HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
Nov 19 #HTML / CSS
Html5之自定义属性(data-,dataset)
Nov 19 #HTML / CSS
如何给HTML标签中的文本设置修饰线
Nov 18 #HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
Nov 18 #HTML / CSS
HTML5实现无刷新修改URL的方法
Nov 14 #HTML / CSS
iframe跨域的几种常用方法
Nov 11 #HTML / CSS
You might like
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
javascript实现计算器功能
2020/03/30 Javascript
python线程池的实现实例
2013/11/18 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
opencv实现简单人脸识别
2021/02/19 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
群胜软件Java笔试题
2012/09/29 面试题
2014新年元旦活动策划方案
2014/02/18 职场文书
教师党员公开承诺书
2014/03/25 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
乐山大佛导游词
2015/02/02 职场文书
史上最牛辞职信
2015/05/13 职场文书
党小组评议意见
2015/06/02 职场文书
工商行政处罚决定书
2015/06/24 职场文书
七年级作文之游记
2019/12/11 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python