vue生成二维码图片并且下载图片到本地

一、安装生成二维码插件qrcode.js

要是项目框架有的,就用项目的,只要找到canvas

把二维码插件封装下,可以重复利用


<template>
	<div>
		<div id="qrcode"></div>
	</div>
</template>
 
<script>
	// 二维码
	import QRCode from 'qrcodejs2' // 引入qrcode
	export default {
		name: 'test',
		mounted() {
			this.qrcode();
		},
		props: {
			width: {
				type: Number,
				default () {
					return 200
				}
			},
			height: {
				type: Number,
				default () {
					return 200
				}
			},
			// 二维码地址
			url: {
				type: String,
				default () {
					return ''
				}
			}
		},
		methods: {
			qrcode() {
				let qrcode = new QRCode('qrcode', {
					width: this.width,
					height: this.height,
					text: this.url,
					colorDark: "#000",
					colorLight: "#fff",
				})
			},
		}
	}
</script>
<style scoped>
	#qrcode {
		display: inline-block;
	}
 
	#qrcode img {
		width: 132px;
		height: 132px;
		background-color: #fff;
		padding: 6px;
	}
</style>

三、应用于页面:


<template>
	<el-dialog :title="dialogTit" :visible.sync="dialogShow" width="360px" :wrapperClosable="false"
		:append-to-body="true" :modal-append-to-body="false">
		<el-container>
			<el-main>
				<div class="qrcodeCon">
					<qrcode id="qrcode" :url="form.w_type_urlstring"></qrcode>
				</div>
				<div class="qrcodeUrl">{{form.w_type_urlstring}}</div>
				<div class="qrcodeDownload">
					<el-button @click="downloadClick">下载二维码</el-button>
				</div>
			</el-main>
		</el-container>
	</el-dialog>
</template>
 
<script>
	import qrcode from '@/components/Qrcode'
 
	export default {
		data() {
			return {
				// 对话框
				dialogTit: '二维码',
				dialogShow: false,
				form: {},
				formLabelWidth: '100px',
 
				// 二维码url
				url: '',
			};
		},
		components: {
			qrcode,
		},
		mounted: function() {
			var _this = this;
			_this.$nextTick(() => {
				_this.$on('handleQrcode', function(row) {
					_this.dialogShow = true;
					_this.form = row;
				});
			});
		},
		methods: {
			// 下载二维码
			downloadClick() {
				// 先找到canvas节点下的二维码图片
				const myCanvas = document.getElementById('qrcode').getElementsByTagName('canvas')
				const img = document.getElementById('qrcode').getElementsByTagName('img')
				// 创建一个a节点
				const a = document.createElement('a')
				// 设置a的href属性将canvas变成png格式
				const imgURL = myCanvas[0].toDataURL('image/jpg')
				const ua = navigator.userAgent
				if (ua.indexOf('Trident') !== -1 && ua.indexOf('Windows') !== -1) { // IE内核 并且  windows系统 情况下 才执行;
					var bstr = atob(imgURL.split(',')[1])
					var n = bstr.length
					var u8arr = new Uint8Array(n)
					while (n--) {
						u8arr[n] = bstr.charCodeAt(n)
					}
					const blob = new Blob([u8arr])
					window.navigator.msSaveOrOpenBlob(blob, '下载' + '.' + 'png')
				} else if (ua.indexOf('Firefox') > -1) { // 火狐兼容下载
					const blob = this.base64ToBlob(imgURL); //new Blob([content]);
					const evt = document.createEvent("HTMLEvents");
					evt.initEvent("click", true, true); //initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
					a.download = ' '; //下载图片名称,如果填内容识别不到,下载为未知文件,所以我这里就不填为空
					a.href = URL.createObjectURL(blob);
					a.dispatchEvent(new MouseEvent('click', {
						bubbles: true,
						cancelable: true,
						view: window
					}));
				} else { // 谷歌兼容下载
					img.src = myCanvas[0].toDataURL('image/jpg')
					a.href = img.src
					// 设置下载文件的名字
					a.download = this.form.title + this.form.w_type_title + '二维码';
					// 点击
					a.click();
 
					this.$message({
						message: '下载成功,已保存到桌面',
						type: 'success'
					});
				}
			},
 
			// base64转blob
			base64ToBlob(code) {
				let parts = code.split(';base64,');
				let contentType = parts[0].split(':')[1];
				let raw = window.atob(parts[1]);
				let rawLength = raw.length;
				let uInt8Array = new Uint8Array(rawLength);
				for (let i = 0; i < rawLength; ++i) {
					uInt8Array[i] = raw.charCodeAt(i);
				}
				return new Blob([uInt8Array], {
					type: contentType
				});
			},
		},
	};
</script>
 
<style scoped>
	.el-container {
		max-height: 600px;
	}
 
	.qrcodeCon {
		text-align: center;
	}
 
	.qrcodeUrl {
		padding: 30px 0;
	}
 
	.qrcodeDownload {
		text-align: center;
	}
</style>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# QRCodeLogin 二维码扫码登录;服务器端、网页前端、移动端源码; ---- ## 项目介绍 - 一个能够实现扫码登录的demo,不妨小小**Star**一下吧 >.< ~,[**简书地址**](https://www.jianshu.com/p/d5a7a3081bbf)请戳。 - 本项目一共包含三份源码,即**服务器端**、**网页前端**和**移动端**。 - **项目 [~~在线体验~~](http://github.trunch.cn/) 请戳,APP安装包 [~~本地下载~~](http://res.trunch.cn/auth/auth.apk) 或 [网盘下载](https://pan.baidu.com/s/1Q76TcKfwkvH2czYfTYrqJg) 请戳:** > - 网页和APP默认登录账号:123456,密码:123456。 > - Android 6.0以上的手机使用APP时请前往设置开启权限。 #### 服务器端 - **说明:** 项目通过SpringBoot搭建而成,采用了Mybatis持久层框架,数据库使用的是MySQL。 - **功能:** 主要功能包括生成二维码图片、获取用户登录的IP地址和地理位置(通过百度提供的接口进行解析)等。 - **源码:** **对应Server文件夹**,里面包含了**sql文件**。运行前需要在源码的**yml配置文件**中修改成自己本地的数据库。 #### 网页前端 - **说明:** 项目基于Vue.js开发,借助vue-cli脚手架进行搭建,使用了Vue Router、axios等。 - **功能:** 主要用于二维码的获取、以及扫码登录过程中的动态效果展示。 - **源码:** **对应Web文件夹**,由于没有上传较大的**node_modules**,所以克隆到本地后要先进行下载。运行前需要将访问的**IP地址**改成自己本地服务器的IP地址。 #### 移动端 - **说明:** 项目基于Android系统开发,使用了一些优秀的开源依赖,比如OkHttp、ZXing等。 - **功能:** 主要功能包括二维码的扫描和解析、以及和账号登录有关的功能等。 - **源码:** **对应Android文件夹**,源码没有针对Android6.0以上的版本**动态申请权限**。运行前记得改成自己本地服务器的**IP地址**(不是127.0.0.1了,一般是计算机在局域网的IP地址,DOS窗口输入ipconfig命令),对应要修改的文件是在源码http包的ApiUtil类中。 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值