通过canvas转换颜色为RGBA格式及性能问题

简介: 通过canvas转换颜色为RGBA格式及性能问题

转换任意颜色为RGBA格式


前端编程过程中,经常会遇到要把各种颜色格式(比如 “red”、“#F00”、“#FF0000”等)转换成RGBA格式,搜索网络也可以发现一堆的解决方案:

微信图片_20220423135918.jpg


此处介绍一种方法:通过canvas的像素获取方法,来获取任意颜色的RGBA数值。大致步骤如下:

  • 首先创建一个尺寸为1*1的canvas,并获取canvas的绘制上下文ctx
  • 设置ctx.fillStyle为指定的颜色
  • 通过ctx.fillRect填充canvas
  • 通过ctx.getImaegeData获取Imagedata对象,并获取其中的像素值,获取的像素值正好是RGBA格式的。


如果读者不清楚canvas相关知识点,建议学习相关知识,也推荐有兴趣读者,订阅专栏:Canvas高级进阶 https://xiaozhuanlan.com/canvas,相关知识会在专栏中介绍。


示例代码如下:


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]
      };
  }
相关文章
|
9月前
|
JavaScript
Js 实现十六进制颜色值和RGB颜色值转换整理
Js 实现十六进制颜色值和RGB颜色值转换整理
203 0
RGB颜色和16进制颜色转换太麻烦,使用SwiftUI搭建一个颜色值转换App(下)
RGB颜色和16进制颜色转换太麻烦,使用SwiftUI搭建一个颜色值转换App(下)
202 0
|
8月前
|
前端开发 开发者
CSS颜色表示:探索预定义名称、RGB、HEX、HSL、RGBA和HSLA
CSS颜色表示:探索预定义名称、RGB、HEX、HSL、RGBA和HSLA
123 6
|
7月前
|
前端开发
width展示的是在Canvas画布上的字符串‘Hello‘的宽度
width展示的是在Canvas画布上的字符串‘Hello‘的宽度
|
存储
RGB颜色和16进制颜色转换太麻烦,使用SwiftUI搭建一个颜色值转换App(上)
RGB颜色和16进制颜色转换太麻烦,使用SwiftUI搭建一个颜色值转换App(上)
139 0
SVG RGB 与 HSL 区别与使用
SVG RGB 与 HSL 区别与使用
89 0
CMKY与RGB的转换
CMKY与RGB的转换
119 0
RGB颜色设置错误
RGB颜色设置错误
165 0
|
C#
c# 颜色RGB到HSB互相转换
原文:c# 颜色RGB到HSB互相转换 1 /// 2 /// 色相,饱和度,亮度转换成rgb值 3 /// 4 /// 5 public static float[] HSB2RGB(float[...
2056 0