了解 HTMLCanvasElement

HTMLCanvasElement:

是所有  <canvas> 元素的代称(可以理解为是<canvas>标签的爹O(∩_∩)O哈哈~)。

类似的还有:HTMLDivElement -> 对应<div> 标签、HTMLImageElement -> 对应<img> 标签、HTMLParagraphElement 对应 <p>标签,几乎所有的标准HTML元素都对应有接口名称,然后全部都继承于:HTMLElement,完整的继承关系,下图:

下边这张图,原型链继承关系很明显:

注意:

这些接口IE9+浏览器支持(话说IE浏览器还存在吗!)

 

属性

1、HTMLCanvasElement.height

表示<canvas>画布绘制区域的高度,标准属性值为正整数,单位是像素。如果高度值不合法,例如负数,则会使用默认的150代替。为什么是150而不是其他高度值呢?这个是CSS规范中定义的,作为替换元素,默认的尺寸是300*150,<canvas>元素就是替换元素,,因此默认高度是150。由于<svg>元素也是替换元素,因此,<svg>默认的尺寸也是300*150。

2、HTMLCanvasElement.width

表示<canvas>画布绘制区域的宽度,标准属性值为正整数,单位是像素,规则同上。

 

** 方法 **

1、HTMLCanvasElement.getContext( )

专业定义:获取<canvas>相关的可绘制的上下文,这个 "上下文" 的意思是相当于一个装画笔、颜料的工具箱,其中包含了许多的API,相当于工具箱中的各种画笔(铅笔、炭笔、马克笔、刷子、擦笔等等),有了这个才能在canvas画布上绘制各种图形。

对于canvas而言,我们借助上下文可以绘制何种图形和效果

// ctx 就是上下文
let canvas = document.getElementById('canvas')
let ctx = canvas.getContext('2d')

 

2、HTMLCanvasElement.toDataURL ( mimeType, definition )

此方法,可以将<canvas> 画布转换成base64格式的图片数据,我们可以通过参数设定图片的类型及清晰度。

参数说明:

mimeType -  表示图像需要转换成什么样的类型,默认是image/png,还可以是image/jpeg 或者 image/webp。

defination  -  表示转换的图片质量,范围是0~1.此参数如果想有效,图片的mimeType需要为 image/jpeg 或者image/webp,其他mimeType值无效。默认的他所质量为 0.92。

返回值:

base64 data图片数据

注意:

(1)如果mimeType 参数值不是 image/jpeg 或者 image/webp 中的一个,最后一定都会当做image/png来处理!!!

(2)toDataURL( ) 处理数据是同步的,所以它没有回调函数。

 

3、HTMLCanvasElement.toBlob( callback,mimeType,definition ) 

可以将<canvas> 画布转换为Blog对象(是一个二进制对象), 此方法,可以把Canvas图像缓存在磁盘上,或者存储在内存中,这个是由浏览器决定的。

参数说明:

callback -  toBlob方法执行成功后的回调方法,支持一个参数,表示当前转换的Blob对象。

mimeType -  同上。

definition  -   同上。

如:

使用toBlob上传图片:

let canvas = document.getElementById('canvas')
canvas.toBlob((blob) => {
    let formData = new FromData()
    formData.append('image', blob)
    // 把 formData 发送给后端即可
})

 

总结

** 同步异步的问题 ** 

toBlob( ) 方法是异步的,而toDataURL()方法是同步的,如果需要转化的canvas尺寸很大,则会阻塞脚本运行,因此,主要控制Canvas的尺寸。

一个图片,如果src 是 base64地址,则渲染速度几乎是毫秒级的,但是,虽然是毫秒级的,它依然是异步的, <img> 元素赋予如果要获取base64地址的对应图片的相关信息的话,需要在回调函数中获取:

let img = new Image()
img.onload = () => {
    // 在这里获取的img.width的宽度就是实际生成的图片的宽度
    // dragImage绘制图片等操作可以在这里完成
}
// 在这里获取的img.width 为0
img.src = 'data:iamge/png;base64,iVBO0RewKGgoA'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值