canvas getImageData中data数据

2 篇文章 0 订阅
  1. 高度渐变(由浅入深渐变)
<!DOCTYPE html>
<html>
<body style="display: flex;flex-wrap: wrap;">
<script>
    let canvas = document.createElement('canvas');
    let imgW = 8,
        imgH = 128;
    canvas.width = imgW;
    canvas.height = imgH;
    let ctx = canvas.getContext("2d");
    let grd = ctx.createLinearGradient(0, 0, 0, imgH - 1);
	// 创建渐变色
    grd.addColorStop(0,"#ffebe8");
    grd.addColorStop(0.02,"#ffdcd7");
    grd.addColorStop(0.04,"#ffcdc6");
    grd.addColorStop(0.06,"#ffbeb5");
    grd.addColorStop(0.08,"#ffafa4");
    grd.addColorStop(0.10,"#ffa093");
    grd.addColorStop(0.13,"#ff9182");
    grd.addColorStop(0.16,"#ff8271");
    grd.addColorStop(0.20,"#ff7360");
    grd.addColorStop(0.25,"#ff644f");
    grd.addColorStop(0.30,"#ff553e");
    grd.addColorStop(0.35,"#ff462d");
    grd.addColorStop(0.4,"#ff371c");
    grd.addColorStop(0.45,"#c61800");
    grd.addColorStop(0.5,"#b51600");
    grd.addColorStop(0.6,"#a41400");
    grd.addColorStop(0.7,"#931200");
    grd.addColorStop(0.8,"#821000");
    grd.addColorStop(0.9,"#600c00");
    grd.addColorStop(1.0,"#3e0800");
   
    ctx.fillStyle = grd;
    ctx.fillRect(0,0,imgW,imgH);
    let legendColor = ctx.getImageData(0,0,imgW,imgH).data

    let idxs = []
    for(let i = 0; i < 500; i++) {
      idxs.push(i)
    }
    // 所有的颜色
    for(let i = 0; i < legendColor.length; i+=4) {
      let dom = document.createElement('div');
      dom.style.width = '50px'
      dom.style.height = '50px'
      dom.style.margin= '2px'
      dom.innerHTML = `${i}`
      dom.style.backgroundColor = `rgba(${legendColor[i]},${legendColor[i+1]},${legendColor[i+2]},${legendColor[i+3]})`
      document.body.appendChild(dom)
    }
</script>
</body>
</html>
  1. 宽度渐变(由浅入深渐变)
<!DOCTYPE html>
<html>
<body style="display: flex;flex-wrap: wrap;">
<script>
    let canvas = document.createElement('canvas');
    let imgW = 128,
        imgH = 20;
    canvas.width = imgW;
    canvas.height = imgH;
    let ctx = canvas.getContext("2d");
    let grd = ctx.createLinearGradient(0, 0, imgW - 1, 0);

    grd.addColorStop(0,"#ffebe8");
    grd.addColorStop(0.02,"#ffdcd7");
    grd.addColorStop(0.04,"#ffcdc6");
    grd.addColorStop(0.06,"#ffbeb5");
    grd.addColorStop(0.08,"#ffafa4");
    grd.addColorStop(0.10,"#ffa093");
    grd.addColorStop(0.13,"#ff9182");
    grd.addColorStop(0.16,"#ff8271");
    grd.addColorStop(0.20,"#ff7360");
    grd.addColorStop(0.25,"#ff644f");
    grd.addColorStop(0.30,"#ff553e");
    grd.addColorStop(0.35,"#ff462d");
    grd.addColorStop(0.4,"#ff371c");
    grd.addColorStop(0.45,"#c61800");
    grd.addColorStop(0.5,"#b51600");
    grd.addColorStop(0.6,"#a41400");
    grd.addColorStop(0.7,"#931200");
    grd.addColorStop(0.8,"#821000");
    grd.addColorStop(0.9,"#600c00");
    grd.addColorStop(1.0,"#3e0800");
 

    ctx.fillStyle=grd;
    ctx.fillRect(0,0,imgW,imgH);
    let legendColor = ctx.getImageData(0,0,imgW,imgH).data

    let idxs = []
    for(let i = 0; i < 500; i++) {
      idxs.push(i)
    }

     // 全部的格子
    for(let i = 0; i < legendColor.length; i+=4) {
	  let dom = document.createElement('div');
      dom.style.width = '50px'
      dom.style.height = '50px'
      dom.style.margin= '2px'
      dom.innerHTML = i
      dom.style.backgroundColor = `rgba(${legendColor[i]},${legendColor[i+1]},${legendColor[i+2]},${legendColor[i+3]})`
      document.body.appendChild(dom)
    }
</script>
</body>
</html>

总结:

  1. 高度渐变和宽度渐变getImageData拿到的data数组长度是一样的,即高度 * 宽度 * 4(r, g, b, a四个数值)
  2. 高度渐变拿到的data数据,从直观角度看,颜色直接都是由浅到深
  3. 宽度渐变拿到的data数据,从直观角度看,颜色根据高度划分成几块由浅入深,取色时要注意颜色的变化规律
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值