html中如果使用canvas来实现二维码和图片合成
这篇文章主要讲解了“html中如果使用canvas来实现二维码和图片合成”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“html中如果使用canvas来实现二维码和图片合成”吧!
实现思路是这样的
使用jr-qrcode
将url生成data:base64
供img
使用
然后使用canvas 将两张图合成一张图片
遇到的问题
生成图片之后发现图片很模糊,解决办法是将canvas
画布扩大两倍,其他参数也夸大两倍就可以了
jr-qrcode
可以使用npm install --save jr-qrcode
安装这个包
作用就是可以转化text
到data:base64
供img
的src
使用
代码如下:
importReact,{Component}from'react'constqrcode=require('jr-qrcode')constloadImg=(src)=>{constpaths=Array.isArray(src)?src:[src];constpromise=[];paths.forEach((path)=>{promise.push(newPromise((resolve,reject)=>{letimg=newImage();img.crossOrigin="Anonymous";img.src=path;img.onload=()=>{resolve(img);};img.onerror=(err)=>{console.log('图片加载失败')}}))});returnPromise.all(promise);}constgetImageData=(url,src)=>{constimgsrc=qrcode.getQrBase64(url)letcanvas=document.createElement('canvas')constwidth=document.documentElement.clientWidthconstheight=document.documentElement.clientHeightcanvas.width=width*2canvas.height=height*2letctx=canvas.getContext("2d")loadImg([imgsrc,src]).then(([img1,img2])=>{ctx.drawImage(img2,0,0,width*2,height*2)ctx.drawImage(img1,width-80,height*2-220,200,160)ctx.fillStyle='rgba(0,0,0,0.3)';ctx.fillRect(width-80,height*2-60,200,40);ctx.save()ctx.font="28pxArial"ctx.fillStyle='#fff';ctx.fillText('长按识别二维码',width-80,height*2-30,200,160)letimageURL=canvas.toDataURL("image/png")document.getElementById('mix_img').setAttribute('src',imageURL)})}exportdefaultclassQRcodeextendsComponent{render(){const{url,picSrc}=this.propsgetImageData(url,picSrc)return(<div><imgalt='mix_img'id='mix_img'/></div>)}}
感谢各位的阅读,以上就是“html中如果使用canvas来实现二维码和图片合成”的内容了,经过本文的学习后,相信大家对html中如果使用canvas来实现二维码和图片合成这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。