动态生成二维码并利用canvas合成出一张图片(类似海报、分享页)
在前端开发并打算推广一个APP的时候,推广页是免不了的,而推广页的展示方式一般是给人家一个二维码,让别人自己去安装APP,这样前段任务也达到了,这次写这篇文章的原因主要还是总结一下,其中有很多不完善的地方,还是请各位指教了:-)。
为了做出一张让人满意分享页,页面上的数据有些当然是需要动态展示的,具体展示效果如下图(部分内容不便展示,见谅):

下面说下需要用到的工具,就两个:
1.能动态生成二维码的插件qrcode 2.canvas画布
因为小编用的vue框架具体引入为:
import qrcode from '@xkeshi/vue-qrcode'
可以看到效果图上的数据展示部分一个是二维码一个是我的用户名,下面我们开始上代码。
html:
<qrcode tag="img" id="img" :value="qrCodeUrl" :options="{ size: 120 }" name="img"></qrcode>
<canvas id="myCanvas" width="400vw" height="711vw"></canvas>
<img :src="newSrc" class="newImage" v-if="newSrc" id="newImage">
为何多加了一个空图片呢?是为了把最后合成的图片canvas变为img图片格式,这样就可以进行处理长按识别、保存图片等处理了。
js:
created: function () {
if (this.qrImg == '' || this.qrImg == null) {
if (vueCookie.get('nickname')) {
this.recommendCode = vueCookie.get('userID')
this.nickname = vueCookie.get('nickname') + '邀您加入'
this.qrCodeUrl = "您要存放的二维码信息"
setTimeout(function () {
that.drawImage()
}, )
} else {
request.get('/ffq/user',{}).then((response) => {
let responseData = response.data.data
this.nickname = responseData.nickname + '邀您加入'
let recommendCode = responseData.recommend_code
this.recommendCode = responseData.user_id
this.qrCodeUrl = "您要存放的二维码信息"
setTimeout(function () {
that.drawImage()
}, )
}).catch((ex) => {
this.$router.push({name: 'Login'})
})
}
}
},
上面这段代码是展示我们动态设置的二维码信息及缓存我的个人信息(这部分看个人随意添加就不注重说明了)。
下面开始就是重点了--------->>>>将背景图与生成的二维码合成展示为一张图片。
methods{
drawImage() {
let canvas1 = document.getElementsByTagName('canvas')[0]
let canvas2 = document.getElementById('myCanvas')
let cans = document.getElementById('img')
let cas1 = canvas1.getContext('2d')
let cas2 = canvas2.getContext('2d')
let img1 = new Image()
let img2 = new Image()
// img1.src = canvas1.toDataURL('images/png', 1)
img1.src = cans.src;
img2.src = '/static/images/qr-code.png'
var that = this
img2.onload = function () {
cas2.drawImage(img2, 0, 0, 400, 712)
cas2.font = '20px Georgia'
cas2.textAlign = 'center'
cas2.fillStyle = 'white';
cas2.fillText(that.nickname, 200, 630);
cas2.drawImage(img1, 104, 378, 194, 194);
that.newSrc = canvas2.toDataURL('images/png', 1)
}
}
首先进行下代码说明,前面定义的canvas1、canvas2是一张图片,是为了后面可以合成图片,之后隐藏的路径开始时是可以的,后来不知怎的就找不到了,预算就用了最原始的获取路径,剩下的就是作图了,当背景图加载好的时候把二维码按照位置画上去就行了,但是,我们得出的最终图片是canvas类型的,这个部分在我测试的时候长按并不会出现任何反应,最后的一行代码是我的解决方案,有其他的方案或者我有出错的地方,欢迎指教!!!。
动态生成二维码并利用canvas合成出一张图片(类似海报、分享页)的更多相关文章
- Jquery.Qrcode在客户端动态生成二维码并添加自定义Logo
0 Jquery.Qrcode简介 Jquery.Qrcode.js是一个在浏览器端基于Jquery动态生成二维码的插件,支持Canvas和Table两种渲染方式,它的优点是在客户端动态生成,减轻了服 ...
- js动态生成二维码
一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src= ...
- jquery动态生成二维码添加自定义logo
动态生成二维码中间带logo. jquery.qrcode.js 动态生成二维码api很简单. 引入jquer(版本任意),引入jquery.qrcode.js 不需要中间带logo这样就可以了.带l ...
- qrcode.js 动态生成二维码
用qrcode.js动态生成二维码图片非常简单,只需要引入qrcode.js即可使用,而且可以自定义图片大小.背景色等信息. 1.jsp代码---页面头部引入qrcode.js,jquery文件可选 ...
- thinkphp5动态生成二维码实例总结
thinkphp5关于动态生成二维码类库总结: 遇到的最大问题如下:我想大部分人也碰到过,所有觉得有必要总结下: thinkphp5提示找不到Qrcode类,可是自己明明都放置到了,vendor 目录 ...
- 动态生成二维码插件 jquery.qrcode.js
前段时间做项目,需要动态生成一个二维码,于是就在网上找了一下发现一个jquery插件jquery.qrcode.js,所以今天就简单说一下这个插件的使用: jquery.qrcode.js是依赖jqu ...
- js动态生成二维码图片
1.html代码 <div id="qrcode" style="width:200px; height:200px;position: fixed;bottom: ...
- 小程序动态生成二维码,生成image图片
前端: <image src="{{img_usrl}}" style="width:100%;height:104px;" bindlongtap=&q ...
- 使用QRCode生成二维码
第一步: 获取QRCode组件 可以通过vs的nuget管理安装Gma.QrCodeNet, 也可以直接添加"Gma.QrCodeNet.Encoding.dll"的引用. 第二步 ...
随机推荐
- Vim中YouCompleteMe插件安装
背景 YouCompleteMe需要使用GCC进行编译,然而Centos 6.7默认的GCC版本太低,所以需要使用devtools-2,用来安装多个版本GCC手动编译安装GCC的坑简直不要太多(类似于 ...
- Linux的top命令
文章来自于长风破浪博主的内容,下面是该博客网址. https://www.cnblogs.com/dragonsuc/p/5512797.html 为了自己能多学习,多记忆,所以直接搬到了这里,希望小 ...
- java多线程系列10 阻塞队列模拟
接下来的几篇博客会介绍下juc包下的相关数据结构 包含queue,list,map等 这篇文章主要模拟下阻塞队列. 下面是代码 import java.util.LinkedList; import ...
- Android使用ksoap2调用C#中的webservice实现图像上传
目录: 一. android使用ksoap2调用webservice 二. 异步调用 三. Android使用ksoap2调用C#中的webservice实现图像上传参考方法 四. 图像传输中Base ...
- SQLite3命令操作大全
SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...
- Linux环境下java开发环境搭建二 tomcat搭建
第一步:下载安装包并解压 # tar zxvf 压缩包名 第二步:把解压出的文件移动到/usr/local/tomcat7中 #mv 解压出来的文件夹 /usr/local/tomcat7 第三步: ...
- 从中央仓库下载所想要的jar包
中央仓库地址:https://mvnrepository.com/ 这边我搜索一个commons-logging包作为例子: 点击下面第二个绿色的comons-logging进入这个页面: 一.win ...
- 6.8 lambda方法 6.9 枚举类
6.9枚举 对于对象个数有限的类可以用枚举类来避免创建对象的随意性. 枚举类关键字enum,是一种特殊的类:构造器只能用private修饰,枚举类的所有实例在第一行举出(系统默认用public sta ...
- java易错题
(选择二项) 8 A: B: C: D: (选择一项) 9 A: B: C: D: 正确答案是 A 您回答的是 B 回答错误 正确答案是 B,D 您回答的是 A,C 回答错误 (选择一项) 18 A: ...
- 阅读笔记4 我是一只IT小小鸟
经过一周连续三四天八小时以上坐在电脑前敲代码的“折磨”,去看看其他经受这些折磨的人的感受.这次读书笔记变成了逗比风,因为前几周认认真真记下书里写的重点内容,然后把学习的内容认真的记录下来的笔记被老师助 ...