基于vue的canvas画图并下载到本地

12 篇文章 1 订阅
11 篇文章 0 订阅

canvas画图的基本步骤

html创建一个canvas标签画布

<div class="contain">
   <canvas id="myCanvas" width="444" height="500" ref="myCanvas"></canvas> 
</div>

canvas的宽高一定要写,因为你不设置他会有一个默认的宽高300*150,你在绘图的时候会出现变形 

js在canvas画布中画出数据

let myCanvas = this.$refs.myCanvas
//画布的宽高
let Cwidth = 500
let CHeight = 500
// 创建一个画布上绘图的环境
var ctx = myCanvas.getContext('2d')
// 一般情况下,canvas的背景颜色是透明的,当生成图片的时候也是透明
// 如果希望图片有个背景颜色,可以创建一个框高100%的矩形
// 画布的最底端-这样就可以有个背景颜色
ctx.fillStyle = '#fff'
ctx.fillRect(0, 0, Cwidth, CHeight);

//设置颜色也可以适用rgba
ctx.fillStyle = 'rgba(0,0,0,0.9)'
//绘制一个矩形的边框(x, y, width, height)
ctx.strokeRect(50, 100, 100, 100)

// 可以在页面插入文字
ctx.fillStyle = '#333'

// 三个参数-文字,横坐标-纵坐标
ctx.font = '16px Arial'
ctx.fillText('今天是个好日子', 50, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect(200, 30, 80, 50);

// 还可以插入图片
// 首先创建一个图片标签
// 等待图片加载完之后在渲染画布中
// let imgObj = new Image()
// imgObj.src = 'http://img4.imgtn.bdimg.com/it/u=3704809141,1787261659&fm=11&gp=0.jpg'
// let imgUrl = await this.imgOnload(imgObj)
// ctx.drawImage(imgUrl, 250, 200, 150, 150)

// 这里图片的我注释了,,因为跨域的图片链接,在生成图片时会失败,你可以使用本地图片
// 基本步骤就这样

// 生成图片(图片的格式)
let imageUrl = myCanvas.toDataURL("image/png", 0.5);

// base64图片地址就获取到了
// 现实中存在两种情况,一个显示页面中,点击下载,这个就简单了,可以利用a标签进行下载
//还有一种情况就是,图片base64地址生成后,自动下载
this.downloadFile(imageUrl, '1.png')
// 加载图片-二维码-条形码
imgOnload(img) {
    return new Promise(resolve => {
        img.onload = function () {
	        resolve(this)
        }
    })
}
// 创建下载图片事件
downloadFile(data, filename) {
    //创建一个具有指定的命名空间URI和限定名称的元素
    var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
    save_link.href = data;
    save_link.download = filename;
    // 绑定下载事件
    var event = document.createEvent('MouseEvents');
    event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false,         false, false, 0, null);
    save_link.dispatchEvent(event);
},

这样的话就可以生成图片,但是还会出现一种情况,就是画的canvas和生成的图片会有点模糊现象,在下一篇文章会写解决办法

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值