【前端学习】Canvas画布

文章目录

  • ·添加canvas
  • ·获取画笔
  • ·API
  • ·绘制图片
    • ·drawImage
  • ·状态的保存与恢复
  • ·获取canvas上的像素
    • ·getImageData
    • ·putImageData
  • ·融合

canvas是HTML5新增的标签,用于提供“画布”,可以通过canvas元素获取对应的“上下文”(可以理解为画笔),来操作显示内容。
canvas的标准属性有width和height(例如id, class这些都属于通用标准属性)
width: 表示canvas的宽
hieght: 表示canvas的高

·添加canvas

<canvas id="myCanvas" width="600" height="400"></canvas>

·获取画笔

var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");

·API

canvas上大部分都是在操作路径,所以在绘制图形之前要开启路径
beginPath(): 开启路径

closePath(): 用于关闭路径 关闭路径的时候,会在关闭时候的点和最开始时候的点形成一条线程

fillRect(x, y, w, h)
x: 当前坐标系中的x点
y:当前坐标系中的y点
w: 矩形的宽
h: 矩形的高

strokeRect(x, y, w, h)
x: 当前坐标系中的x点
y:当前坐标系中的y点
w: 矩形的宽
h: 矩形的高

clearRect(x, y, w, h)
x: 区域的x点 (左上角)
y: 区域的y点 (左上角)
w: 区域的宽
h:区域的高

arc(x, y, r, star, end, dir)
x: 圆弧所在的圆心的x点
y: 圆弧所在的圆心的y点
star: 圆弧起始位置
end: 圆弧结束的位置
dir: 方向 false: 顺时针 true: 逆时针

fill: 用于添加路径

stroke: 描边路径

font(): 改变文字样式

lineWidth: 改变线宽

strokeStyle: 改变描边颜色

fillStyle: 改变填充颜色

注:使用fillRect,strokeRect不用开启路径

·绘制图片

将一张图片放在canvas上可以通过:
1、插入图片
2、设置背景图
3、drawImage

·drawImage

绘制图片可以分为三种方式:

1、以原尺寸绘制图片
ctx.drawImage(img, x, y)
img: 要绘制的图片
x: 当前canvas上的x点
y: 当前canvas上的y的

2、缩放图片
ctx.drawImage(img, x, y, w, h)
img: 要绘制的图片
x: 缩放后的图片放在canvas上的x点
y: 缩放后的图片放在canvas上的y点
w: 缩放后的图片宽
h: 缩放后的图片高

3、截取图片并缩放图片
ctx.drawImage(img, img_x, img_y, img_w, img_h, canvas_x, canvas_y , canvas_w, canvas_h )
img: 要绘制的图片
img_x: 要截取的图片的x点
img_y: 要截取的图片的y点
img_w: 要截取的图片的宽
img_h: 要截取的图片的高
canvas_x: 将截取后的图片放在canvas上的x点
canvas_y: 将截取后的图片放在canvas上的y点
canvas_w: 截取后的图片放在canvas上的宽
canvas_h : 截取后的图片放在canvas上的高

·状态的保存与恢复

在操作图像的时候,很可能会用到ctx之前的状态, canvas提供了相应的api用于保存状态

// 改变填充色
ctx.fillStyle = "blue";
// 绘制矩形
ctx.fillRect(0, 0, 100, 100);
// 保存
ctx.save();
// 改变填充色
1ctx.fillStyle = "orange";
// 绘制矩形
ctx.fillRect(100, 100, 100, 100);
// 恢复
ctx.restore();
ctx.fillRect(200, 200, 100, 100);

·获取canvas上的像素

·getImageData

该方法用于获取canvas上的像素信息,返回一个对象
使用方式:
ctx.getImageData(x, y, w, h)
x: 要获取的矩形区域的x点
y: 要获取的矩形区域的y点
w: 矩形的宽
h: 矩形的高
特点:需要服务器环境

·putImageData

该方法用于将getImageData获取到的对象重新放回canvas上。
ctx.putImageData(imgData, x, y);
imgData: 修改之后的像素对象
x: 放置到canvas上的x点
y: 放置到canvas上的y点

·融合

ctx.globalCompositeOperation

source-over 默认。在目标图像上显示源图像。
source-atop 在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。
source-in 在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。
source-out 在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。
destination-over 在源图像上方显示目标图像。
destination-atop 在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。
destination-in 在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。
destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。
lighter 显示源图像 + 目标图像。
copy 显示源图像。忽略目标图像。
xor 使用异或操作对源图像与目标图像进行组合。

你可能感兴趣的:(HTML5学习笔记,html5,canvas,前端,javascript)