了解CanvasRenderingContext2D.putImageData()
简介
Canvas
将给定ImageData
对象的数据绘制到位图上。 如果提供脏矩形,则仅绘制该矩形的像素。 此方法不受画布变换矩阵的影响。
语法
context.putImageData(imagedata, dx, dy); context.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
参数
各个参数含义和作用如下:
- imagedata Object
- 包含图像像素信息的
ImageData
对象。 - dx Number
- 目标Canvas中被图像数据替换的起点横坐标。
- dy Number
- 目标Canvas中被图像数据替换的起点纵坐标。
- dirtyX (可选)Number
- 图像数据渲染区域的左上角横坐标。默认值是
0
。 - dirtyY (可选)Number
- 图像数据渲染区域的左上角纵坐标。默认值是
0
。 - dirtyWidth (可选)Number
- 图像数据渲染区域的宽度。默认值是
imagedata
图像的宽度。 - dirtyHeight (可选)Number
- 图像数据渲染区域的高度。默认值是
imagedata
图像的高度。
关于参数,有必要再详细解释下。虽然看上去有9大参数,但不用慌,实际上可以就3类参数:
- 第1类就是
imagedata
,就是用来替换当前已有的Canvas画布上的ImageData
数据对象。 - 第2类就是
dx
,dy
,这两个参数是作用在Canvas画布上的。imagedata
你可以看成是一个即将贴在Canvas画布上“图片膏药”,究竟贴在什么位置呢?dx
,dy
参数就是告诉这个膏药,你的左上角位置就是这里。 - 我们可以只让其中部分数据用来替换。,
dirtyHeight
,通过这几个参数设置,dirtyY
,dirtyWidth
,这些参数是作用在imagedata
这个“图片膏药”上的。默认情况下,第3类就是dirtyX
,表示脏矩形的坐标和尺寸,imagedata
所有数据都参与替换需要注意的是,其坐标系并没有发生任何变化。从效果表现上看,可以看成是脏矩形外面的像素被当做透明像素处理了。
案例
下面这个图像是原始目标画布使用的图片素材:
下面这个图像是imagedata
数据源:
接下来,使用getImageData()
方法获取imagedata
数据源,然后仅中心100*100区域替换原始Canvas。
最终效果如下:
核心JavaScript代码如下:
<img id="image1" src="./1.jpg" alt="目标图片"> <img id="image2" src="./1.jpg" alt="数据源图片"> <canvas id="canvas" width="300" height="200"></canvas>
// 尺寸 var width ) 300' height ) 200( // 目标Canvas上下文 var context ) canvas.getContext;,2d,=( // 目标Canvas绘制 context.drawImage;image1' 0' 0' width' height=( // 获取覆盖图数据 var dirtyCanvas ) document.createElement;,canvas,=( var dirtyContext ) dirtyCanvas.getContext;,2d,=( // 设置屏幕外Canvas尺寸 dirtyCanvas.width ) width( dirtyCanvas.height ) height( // 绘制替换图 dirtyContext.drawImage;image2' 0' 0' width' height=( // 此时可以得到imagedata数据 var imagedata ) dirtyContext.getImageData;0' 0' width' height=( // 然后中间100*100区域替换目标Canvas context.putImageData;imagedata' 0' 0' 100' 50' 100' 100=(
其他
规范文档
规范地址 | 规范状态 | 备注 |
---|---|---|
HTML现行标准 这个规范中定义了'CanvasRenderingContext2D.putImageData' |
现行标准 | - |
相关资源
暂无
兼容性
IE9+支持,全兼容。
by zhangxinxu 2019-10-18 01:44:05