通过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 09 HTML / CSS
分享CSS3中必须要知道的10个顶级命令
Apr 26 HTML / CSS
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
Mar 31 HTML / CSS
CSS中垂直居中的简单实现方法
Jul 06 HTML / CSS
利用CSS3把图片变成灰色模式的实例代码
Sep 06 HTML / CSS
HTML5 Web 存储详解
Sep 16 HTML / CSS
HTML5的结构和语义(5):交互
Oct 17 HTML / CSS
HTML5的语法变化介绍
Aug 13 HTML / CSS
HTML5的一个显示电池状态的API简介
Jun 18 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
Sep 23 HTML / CSS
html+css实现环绕倒影加载特效
Jul 07 HTML / CSS
使用HBuilder制作一个简单的HTML5网页
Jul 07 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
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
ES6 Map结构的应用实例分析
2019/06/26 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
Python中encode()方法的使用简介
2015/05/18 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python如何访问字符串中的值
2020/02/09 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
植物生产学专业求职信
2014/08/08 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
升学宴答谢词
2015/01/05 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
Python+Tkinter打造签名设计工具
2022/04/01 Python