canvas 像素操作

在 canvas 中可以使用 context.drawImage(image,dx,dy) 方法将图片绘制在 canvas 上。将图片绘制上去后,还可以使用 context.getImageData(sx, sy, sw, sh) 方法获取 canvas 区域隐含的像素数据,该方法返回一个 ImageData 对象,里面包含的是 canvas 像素信息。

getImageData 函数

这个函数有四个参数,都是必选的。context.getImageData(sx, sy, sw, sh),其中:

  • sx:将要被提取的图像数据矩形区域的左上角 x 坐标;
  • sy:将要被提取的图像数据矩形区域的左上角 y 坐标;
  • sw:将要被提取的图像数据矩形区域的宽度;
  • sy:将要被提取的图像数据矩形区域的高度;
const canvas = document.querySelector("#canvas");
const ctx = canvas.getContext("2d");let image = new Image(canvas.height);
image.src = "图片路劲.jpg";// image onload后再获得像素,不然有可能获得不了
image.onload = function(){ctx.drawImage(image,0,0);let imageData = ctx.getImageData(0,0,canvas.width,canvas.height);console.log(imageData);/*imageData键值说明:colorSpace: string -- 图片色彩转换标准data: Array -- 我们想要获得的区域内的像素信息height: number -- canvas高度width: number -- canvas宽度ps:imageData.data 中的像素数据是一个一维正整数数组(Uint8ClampedArray 类型的数组,即:无符号整型),一个像素信息包含 RGB 三原色信息和透明度。data 数组数据每四个为一组,分别表示 RGB 通道和透明度。这四种值取值都在 0-255 之间。*/
}

putImageData() 函数

该方法可以将 imageData 对象绘制到 canvas 上。我们可以用 getImageData 将获取到的 imageData 数据处理后再使用 putImageData 方法重新绘制到 canvas 中。
参数:
ctx.putImageData(imagedata, dx, dy);
或:ctx.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);

  • imagedata:getImageData返回的imageData数据
  • dx:源图像数据在目标画布中的 x 轴方向的偏移量;
  • dy:源图像数据在目标画布中的 y 轴方向的偏移量;
  • dirtyX 可选:在源图像数据中,矩形区域左上角的位置。默认是整个图像数据的左上角(x 坐标)。
  • dirtyY 可选::在源图像数据中,矩形区域左上角的位置。默认是整个图像数据的左上角(y 坐标)。
  • dirtyWidth 可选:在源图像数据中,矩形区域的宽度。默认是图像数据的宽度。
  • dirtyHeight 可选:在源图像数据中,矩形区域的高度。默认是图像数据的高度。

简单的 canvas 的像素操作

在 CSS 颜色值里,可以使用六位十六进制法表示颜色值,比如:#000000 表示纯黑色,还可以使用 rgb 通道表示法表示一个颜色,格式:rgb(red,green,blue) 当值是 rgb(255,255,255) 是就是纯白色,rgb(255,0,0) 表示红色。rgb 通道的取值在 0-255 之间。在 CSS 当中,还定义了 rgba 颜色值,多出来的 a 表示透明度,只不过取值在 0-1 之间,0 表示透明度为 100%(而在 canvas 的像素中,透明度同样是 0-255 之间)。

通过上面getImageData 和putImageData我们就可以随意操作像素数据了。
这里简单用代码给出几个例子

<img src="https://profile.csdnimg.cn/1/8/0/0_wydsnza"height="300" width="300" /><canvas id="canvas" height="300" width="300"></canvas><script>const canvas = document.querySelector("#canvas");const ctx = canvas.getContext("2d");let image = new Image(canvas.height);image.src = "https://profile.csdnimg.cn/1/8/0/0_wydsnza";image.onload = function () {ctx.drawImage(image, 0, 0);let imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);let data = imageData.data;let newData = imageData//到这一步 我们已经获取到区域内的像素数组data了 接下来我们只需要遍历之后对每一个像素进行独立操作就可以了for (let i = 0; i < data.length; i += 4) {//这里注意一下 一个像素信息包含 RGB 三原色信息和透明度 所以这里data数组是每四个数组元素代表一个像素 let r = newData.data[i], g = newData.data[i + 1], b = newData.data[i + 2]//修改透明度(乘的这个值越高 透明度越低 取值范围 0-1 浮点型)//newData.data[i + 3] = 255*0.5// 修改明度(乘的这个值越高 明度越高 取值范围0-1 浮点型)// newData.data[i] = r * 0.5// newData.data[i + 1] = g * 0.5// newData.data[i + 2] = b * 0.5//反色//newData.data[i] = 255 - r//newData.data[i + 1] = 255 - g//newData.data[i + 2] = 255 - b//灰度//newData.data[i] = (r + g + b) / 3//newData.data[i + 1] = (r + g + b) / 3//newData.data[i + 2] = (r + g + b) / 3}ctx.putImageData(newData, 0, 0);}</script>

运行效果:

透明度:

明度:

反色:

灰度:

只开启r通道

只开启g通道

只开启b通道

canvas 像素操作相关推荐

  1. canvas像素操作、save与restore、合成与变形

    一.canvas像素操作 (1)获取图像像素 (2)写入像素数据 (3)创建像素数据 (4)小案例,将canvasA画布的图像复制到canvasB中 二.canvas的save与restore 三.c ...

  2. html5像素处理,HTML5 Canvas像素操作

    本文介绍Canvas中强大的像素操作功能.这是非常有价值的一个功能,有了这一功能,就可以直接访问Canvas底层像素数据. 注意 由于人们可以直接操纵像素数据,因此出现了某些人利用从Canvas直接获 ...

  3. canvas 像素操作(图片像素操作)

    canvas 图片像素/像素操作 在 canvas 中的 drawImage() 方法允许在 canvas 中插入其他图像( img 和 canvas 元素都可以) .图片绘制上去后,我们可以通过 g ...

  4. canvas像素操作 取色器 写入像素数据 缩放和反锯齿 保存图片

    博客简介 HTML5中的canvas允许我们直接对像素进行操作,我们可以通过ImageData对象操纵像素数据,读取或将数据数组写入该对象中.这里还会介绍如何控制图像使其平滑(反锯齿)以及如何从Can ...

  5. canvas上的像素操作(图像复制,细调)

    canvas上的像素操作(图像复制,细调) 总结 1.操作对象:ImageData 对象,其实是canvas的像素点集合 2.主要操作: var obj=ctx.getImageData(0,0,10 ...

  6. Canvas学习笔记及像素操作——实现马赛克

    绘制文本 window.onload = function () {//获取画布var canvas = document.querySelector('#test')//检查支持性if (canva ...

  7. 《canvas》之第8章 像素操作

    <canvas>之第8章 像素操作 第8章 像素操作 8.1 像素操作简介 8.1.1 getImageData()方法 8.1.2 putImageData()方法 8.1.3 getI ...

  8. html 像素 视频教程,canvas像素点操作之视频绿幕抠图

    本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下: 用法: context.putImageData(imgData, x, y, dX, dY, dWidth, dHeight) ...

  9. React + Canvas 像素风格取色器

    前言 有时候我们需要通过图片去获得具体像素的颜色.而强大的 Canvas 为我们提供了现成的接口. 这个功能其实并不难,只不过我们需要正确的理解 Canvas 并学会利用它的 API . 如果你急于看 ...

最新文章

  1. 看到OSC有一期是:“OSChina 第 37 期高手问答 —— 消息队列服务”
  2. angr学习笔记(11)(SimProcedure)
  3. Android 8.0 运行时权限策略变化和适配方案
  4. RecyclerView万能分割线
  5. python tkinter 背景色改变不了_python - Tkinter背景颜色问题 - 堆栈内存溢出
  6. Android API Guides---Bluetooth
  7. mysql ssh .net_c# – 使用SSH.NET库与MySQL建立SSH连接
  8. Spring Boot 菜鸟教程 application.properties 常用配置
  9. 特斯拉最廉价车型——基础版Model 3将取消网售
  10. linux下矩阵键盘设备名,Linux下矩阵键盘驱动分析与移植
  11. 修改Chrome的User Agent的方法 真实有效
  12. EMC相关标准 GB IEC EN对照(持续添加中……)
  13. idea 设置字体大小
  14. 手机版wps怎么制作折线图_wps怎么制作目录
  15. Mysql(2)事务
  16. 使用kind快速搭建本地k8s集群
  17. 大一新生必看,自学必看,里昂详解数据结构之线性表
  18. java.lang.IllegalArgumentException: Could not find class异常解决方式
  19. 每日一题 笨拙的手指
  20. (信贷风控八)行为评分卡模型(B卡)的介绍

热门文章

  1. 我的高三 (2)[百日誓师后.]
  2. RxJava2 如何使工作线程在Disposable.dispose后完成流程
  3. vim php语法检查
  4. HDOJ 5131 Song Jiang's rank list(暴力排序水题)
  5. Vue路由(vue-router)
  6. salmon quasi-mapping 原理解析
  7. 能加载文件或程序集“System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖
  8. XRuby 0.1.4发布了!
  9. Android各平台模拟器分辨率 .
  10. Python爬取知乎电影话题回答,采集提及次数前50的电影