通过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 给页面加个半圆形导航条主要利用旋转和倾斜样式
Feb 10 HTML / CSS
纯CSS实现的大小渐变、渐远效果
Apr 15 HTML / CSS
CSS3制作漂亮的照片墙的实现代码
Jun 08 HTML / CSS
CSS3 实现的缩略图悬停效果
Dec 09 HTML / CSS
HTML5 本地存储 LocalStorage详解
Jun 24 HTML / CSS
html5利用canvas绘画二级树形结构图的示例
Sep 27 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
Jan 10 HTML / CSS
在canvas上实现元素图片镜像翻转动画效果的方法
Mar 20 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
Apr 08 HTML / CSS
canvas小画板之平滑曲线的实现
Aug 12 HTML / CSS
canvas版人体时钟的实现示例
Jan 29 HTML / CSS
HTML中table表格拆分合并(colspan、rowspan)
Apr 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
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009/08/03 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
js表单序列化判断空值的实例
2017/09/22 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
python插入数据到列表的方法
2015/04/30 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
Python tkinter实现日期选择器
2021/02/22 Python
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
《兰亭集序》教学反思
2014/02/11 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
钳工实训报告总结
2014/11/04 职场文书
自我推荐信格式模板
2015/03/24 职场文书
营业员岗位职责范本
2015/04/14 职场文书
古诗之感恩老师
2019/10/24 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
详解非极大值抑制算法之Python实现
2021/06/28 Python
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技