利用canvas处理图片像素

利用canvas处理图片像素

1、学习getImageData功能

getImageData方法会返回一个ImageData对象,其中包含Canvas画布部分或完整的像素点信息。我们要对其做像素处理,是不可或缺的一部分

ImageData有如下符合规范标准的属性。

ImageData.data
只读。是一个包含RGBA像素信息的Uint8ClampedArray,数组中所有的值都是整数,范围是0~255。

ImageData.height
只读。是无符号长整数,表示ImageData对应的实际像素高度。

ImageData.width
只读。是无符号长整数,表示ImageData对应的实际像素宽度。

2、如何应用getImageData功能

介绍完了Api的使用,接下来可以看下在代码中是如何操作的

// 对图像做散点处理
var context = canvas.getContext('2d');
// x: 图像在画布中x坐标
// y: 图像在画布中y坐标 - 左上角顶点为坐标原点
// imgWidth:图像宽度
// imgHeight:图像高度
// 获取像素值
var imageData = this.context.getImageData(x, y, imgWidth, imgHeight);
funciton getPixels(height, width) {
    let pos = 0;
    const pixels = [];
    const data = this.imageData.data; //RGBA的一维数组数据
    //想要处理图像得部分
    for (let i = 1; i <= height; i++) {
      for (let j = 1; j <= width; j++) {
        pos = ((i - 1) * width + (j - 1)) * 4; //取得像素位置
        if (data[pos] >= 0) {
          const pixel = {
            x: x + j + Math.floor(Math.random() * 1.1), //重新设置每个像素的位置信息
            y: y + i + Math.floor(Math.random() * 1.1), //重新设置每个像素的位置信息
            fillStyle:
              'rgba(' +
              data[pos] +
              ',' +
              data[pos + 1] +
              ',' +
              data[pos + 2] +
              ',' +
              data[pos + 3] +
              ')',
          };
          pixels.push(pixel);
        }
      }
    }
    // 清除画布
    context.clearRect(0, 0, canvasWidth, canvasHeight);
    const len: number = pixels.length;
    let curr_pixel = null;
    // 将处理好的数控,重新填充渲染
    for (let i = 0; i < len; i++) {
      curr_pixel = pixels[i];
      context.fillStyle = curr_pixel.fillStyle;
      context.fillRect(curr_pixel.x, curr_pixel.y, 1, 1);
    }
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值