使用vue怎么在HTML页面中生成图片

本篇文章给大家分享的是有关使用vue怎么在HTML页面中生成图片,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

生成带logo的二维码

用 vue_qrcodes 生成带logo的二维码

安装

npm install vue_qrcodes -- save

使用

<!--部分html代码-->
<qrcode:url="qrcodeUrl"
:iconurl="iconurl"
:wid="298"
:hei="278"
:imgwid="100"
:imghei="100">
</qrcode>

//部分js代码
importqrcodefrom'vue_qrcodes'
//...省略其他代码
components:{
qrcode
}

问题来了:二维码出现了,但是二维码和logo大小并不是你想要,无法自适应。那就需要我们重置二维码和logo的样式。

.logoimg{
height:100px!important;
width:100px!important;
margin-top:-50px!important;
margin-left:-50px!important;
}
#qrcode{
margin-top:20px;
img{
height:278px!important;
width:298px!important;
}
}

html转化为base64图片

html转化为canvas中我选用组件 html2canvas

yarn add html2canvas

import html2canvas from 'html2canvas'

为了防止页面有闪屏我用了两个div,一个存放原来的dom,一个存放canvas的生成的图片,再v-if控制展示的元素。

使用vue怎么在HTML页面中生成图片

js调用函数:

htmlToCanvas(){
html2canvas(this.$refs.bill,{})
.then((canvas)=>{
letimageUrl=canvas.toDataURL('image/png');//将canvas转成base64图片格式
this.canvasImageUrl=imageUrl;
this.isDom=false;
});
}
//二维码地址
this.qrcodeUrl=data.data.inviteCodeAddress
//调用html转化canvas函数
this.htmlToCanvas();

结果如图:

使用vue怎么在HTML页面中生成图片

页面转化成了图片,但是二维码没有展示出来,控制台报错:

使用vue怎么在HTML页面中生成图片

除二维码其他部分已经转化为图片,二维码不显示,原因有两种可能:

转化时二维码还没有加载完成

转化二维码的过程中报错了

首先尝试了nextTick

使用 nextTick 将回调延迟到下次DOM更新循环之后执行

//二维码地址
this.qrcodeUrl=data.data.inviteCodeAddress
this.$nextTick(()=>{
//跳用html转化canvas函数
this.htmlToCanvas();
})

使用vue怎么在HTML页面中生成图片

发现二维码出来了,但是二维码的大小不对,并且控制台还是存在报错。虽然问题没有完全解决,但是二维码出现了。可以证明二维码不展示的原因是,转化时二维码没有加载完成。

再尝试使用setTimeout

使用 setTimeout 将回调延迟到指定时间之后执行

//二维码地址
this.qrcodeUrl=data.data.inviteCodeAddress
setTimeout(()=>{
//调用html转化canvas函数
this.htmlToCanvas();
},200)

查看效果:

使用vue怎么在HTML页面中生成图片

注:setTimeout是我目前能想到延迟加载方法。各位大佬们,如果这个有更好的方法解决上面的问题,麻烦给留言,在此谢过。

页面正常,控制台没有报错,可是logo没有展示出来。

logo地址是:

iconurl: 'https://static.daojia.com/assets/project/tosimple-pic/LOGO_1576564983633.png',

项目在本地启动,可能存在跨域问题。

htmlToCanvas(){
html2canvas(this.$refs.bill,{
useCORS:true//解决图片跨域问题
}).then((canvas)=>{
//将canvas转成base64图片格式
letimageUrl=canvas.toDataURL('image/png');
this.canvasImageUrl=imageUrl;
this.isDom=false;
}).catch((e)=>console.log(e));
}

以上就是使用vue怎么在HTML页面中生成图片,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。

发布于 2021-03-21 22:39:02
收藏
分享
海报
0 条评论
186
上一篇:如何在Python中使用dict和defaultdict 下一篇:如何在YII2框架中使用behavior
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码