根据createLinearGradient结果获取rgb

1. 应用场景

在地图上使用 canvas 创建图例时,需要根据图里上的颜色标记地图上要素的颜色。因此需要获取 createLinearGradient或createRadialGradients上的颜色!

2. 代码实现

getGredientColor(){
      let mycanvas = document.createElement('canvas')
      mycanvas.style.height = '200px'
      mycanvas.style.width = '200px'
      var ctx = mycanvas.getContext("2d");
      var grd = ctx.createLinearGradient(0,0,200,0);
      grd.addColorStop(0.25, "#409EFF");
      grd.addColorStop(0.55, "#67C23A");
      grd.addColorStop(0.85, "#E6A23C");
      grd.addColorStop(1, "#F56C6C");
      ctx.fillStyle = grd;
      ctx.fillRect(0,0,200,50);
      let dataArr = []
      const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
      for(let i=0;i<200;i++){
          var pixelData = ctx.getImageData(200-i-1, 10, 1, 1).data;
          dataArr.push(rgbToHex(pixelData[0],pixelData[1],pixelData[2]))
      }
      return dataArr
    }

note: 默认创建一个 200px 200px宽高的 canvas 元素,然后使用线性渐变填充。返回一个长度为200的数据,如下

[ ‘#f56d6b’, ‘#f46e69’, ‘#f47068’, ‘#f37266’, ‘#f37465’, ‘#f27663’, ‘#f27861’, ‘#f17960’,…]

3. 根据最大/小值映射色带

getRelatedColor(max,min,value,valueArr){
   let index = parseInt((value - min) / (max- min) * 200)
   if(valueArr[index]){
     return valueArr[index]
   }else{
     return valueArr[valueArr.length - 1]
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值