canvas实现涂鸦效果--清屏和保存功能

利用canvas实现涂鸦效果,包括更换笔触大小颜色、换背景图、橡皮檫、历史记录、清屏等功能,并能保存涂鸦图片到本地。

由于篇幅问题,本文主要实现清屏和保存功能,最终效果如下图。

Tips:本文是在《 canvas实现涂鸦效果--基本涂鸦效果》和《canvas实现涂鸦效果--大小颜色背景图》基础上添加功能。

canvas实现涂鸦效果--清屏和保存功能

清屏功能

清屏功能比较简单,不需要增加html代码和css样式,只需要增加如下图js代码;原理就是点击清屏按钮(clearButton)时候,清除(clearRect)掉涂鸦画布(ctx)和背景图画布(offCtx)的内容。

canvas实现涂鸦效果--清屏和保存功能

保存功能

编写静态样式,只需要增加如下图一行html代码,主要是用于保存涂鸦画布和背景图画布的图片,后面合成于离屏画布。

canvas实现涂鸦效果--清屏和保存功能

声明变量和初始化数据,详细代码如下图,基于前面功能声明修改了红色框的数据:

imgSrc设置背景图片地址,也用于判断是否有背景图;

imgArray存储背景图和涂鸦图,用于循环添加到元素img。

canvas实现涂鸦效果--清屏和保存功能

分析实现保存功能之前,先需要了解函数saveFile(saveFile),因为canvas没办法直接保存为图片,所以下面的代码利用了模拟鼠标点击事件进行保存,且能自定义文件名。

canvas实现涂鸦效果--清屏和保存功能

保存功能实现过程,简单说就是把涂鸦画布和背景图画布的内容合成到另一个画布,然后把该画布内容保存成图片到本地,详细分析如下(点击保存按钮(saveButton)时候):

首先把涂鸦画布和背景图画布的内容转换成图片存储到数组imgArray;

然后把imgArray传值给函数compositeGraph,该函数首先把数组imgArray内容循环转化成html中元素img的内容(该内容是隐藏的),然后循环该元素img轮流绘画到离屏画布上面,最后把该离屏画布转化成图片并利用函数saveFile保存成图片到本地。

注意:

图片需要使用onload(val.onload),不然图片未准备就执行,会显示空白;

转换离屏画布为图片和执行函数saveFile需要使用定时器,不然也会导致保存空白图片。

canvas实现涂鸦效果--清屏和保存功能

注意事项

toDataURL有跨域问题,所以需要发布到服务器上,才能正常使用。