好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

转换任意颜色为RGBA格式

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

@H_ 304 _9@

此处介绍一种方法: 通过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.h ei ght = 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]
      };
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

总结

以上是 为你收集整理的 通过canvas转换颜色为RGBA格式及性能问题的解决 全部内容,希望文章能够帮你解决 通过canvas转换颜色为RGBA格式及性能问题的解决 所遇到的问题。

如果觉得 网站内容还不错, 推荐好友。

查看更多关于通过canvas转换颜色为RGBA格式及性能问题的解决的详细内容...

  阅读:27次