通过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 动画技术
Jul 27 HTML / CSS
CSS3 透明色 RGBA使用介绍
Aug 06 HTML / CSS
用CSS3实现背景渐变的方法
Jul 14 HTML / CSS
CSS3中的content属性使用示例
Jul 20 HTML / CSS
通过一张图教会你CSS3倒影的实现
Sep 26 HTML / CSS
CSS3 分类菜单效果
May 27 HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
Jun 01 HTML / CSS
HTML5 本地存储实现购物车功能
Sep 07 HTML / CSS
HTML5的download属性详细介绍和使用实例
Apr 23 HTML / CSS
html5定位获取当前位置并在百度地图上显示
Aug 22 HTML / CSS
HTML5新增加标签和功能概述
Sep 05 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
Oct 16 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
7个超级实用的PHP代码片段
2011/07/11 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
javascript基本算法汇总
2016/03/09 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
Python编程中的异常处理教程
2015/08/21 Python
浅谈python中set使用
2016/06/30 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
Python实现进程同步和通信的方法
2018/01/02 Python
python3中函数参数的四种简单用法
2018/07/09 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Python虚拟环境venv用法详解
2020/05/25 Python
django教程如何自学
2020/07/31 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
如何判断计算机可能已经中马
2013/03/22 面试题
2014年度个人工作总结
2014/11/07 职场文书
先进教师事迹材料
2014/12/16 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android