通过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实现的几个小loading效果
Sep 27 HTML / CSS
使用CSS3的::selection改变选中文本颜色的方法
Sep 29 HTML / CSS
利用CSS3的border-radius绘制太极及爱心图案示例
May 17 HTML / CSS
CSS3实现各种图形的示例代码
Oct 19 HTML / CSS
详解CSS3中nth-child与nth-of-type的区别
Jan 05 HTML / CSS
html5+css3之制作header实例与更新
Dec 21 HTML / CSS
HTML5边玩边学(2)基础绘图实现方法
Sep 21 HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
Jan 01 HTML / CSS
HTML5有哪些新特征
Dec 01 HTML / CSS
HTML5学习心得总结(推荐)
Jul 08 HTML / CSS
html输入两个数实现加减乘除功能
Jul 01 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中curl_setopt函数用法实例分析
2015/04/16 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
破解Session cookie的方法
2006/07/28 Javascript
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
JavaScript 基本概念
2015/01/20 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
python如何实现int函数的方法示例
2018/02/19 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
网络维护管理员的自我评价分享
2013/11/11 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
音乐节策划方案
2014/06/09 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
购房意向书
2014/08/30 职场文书
自信主题班会
2015/08/14 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
Java对文件的读写操作方法
2022/04/29 Java/Android
mysql 排序失效
2022/05/20 MySQL