通过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 相关文章推荐
css3 按钮样式简单可扩展创建
Mar 18 HTML / CSS
css3进行截取替代js的substring
Sep 02 HTML / CSS
CSS中垂直居中的简单实现方法
Jul 06 HTML / CSS
HTML5 placeholder属性详解
Jun 22 HTML / CSS
html通过canvas转成base64的方法
Jul 18 HTML / CSS
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
Jan 06 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
Oct 20 HTML / CSS
多视角3D可旋转的HTML5 Logo动画
Mar 02 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
Apr 23 HTML / CSS
html5响应式开发自动计算fontSize的方法
Jan 13 HTML / CSS
HTML5表单验证特性(知识点小结)
Mar 10 HTML / CSS
CSS 一行代码实现头像与国旗的融合
Oct 24 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循环跳出的问题
2013/07/01 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JavaScript中实现块作用域的方法
2010/04/01 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
干部选拔任用方案
2014/05/26 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
导游词之青城山景区
2019/09/27 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
浅谈Python numpy创建空数组的问题
2021/05/25 Python