通过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和CSS3表单验证功能
May 05 HTML / CSS
利用CSS3实现动态的二级三级菜单效果实例源码
Jan 04 HTML / CSS
一款纯css3制作的2015年元旦雪人动画特效教程
Dec 29 HTML / CSS
使用CSS3来绘制一个月食图案
Jul 18 HTML / CSS
使用CSS3的appearance属性改变元素的外观的方法
Dec 12 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
May 23 HTML / CSS
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
Jan 12 HTML / CSS
利用css3如何设置没有上下边的列表间隔线
Jul 03 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
Jan 04 HTML / CSS
html5 div布局与table布局详解
Nov 16 HTML / CSS
css3中transform属性实现的4种功能
Aug 07 HTML / CSS
DIV CSS实现网页背景半透明效果
Dec 06 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中GET变量的使用
2006/10/09 PHP
PHP 处理图片的类实现代码
2009/10/23 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
python导入模块交叉引用的方法
2019/01/19 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
Python join()函数原理及使用方法
2020/11/14 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
产品工艺师的岗位职责
2013/11/15 职场文书
个人承诺书
2014/03/26 职场文书
政治学求职信
2014/06/03 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis