vue2.0生成二维码图片并且下载图片到本地兼容写法
vue生成二维码图片,这里使用的是qrcode.js 这个插件(亲测写法,兼容没有问题)
第一步,下载插件
需要注意,这里下载的是qrcodejs2
- cnpm install --save qrcodejs2
第二步,在组件使用
- <template>
- <div>
- <div @click="getQrcode"></div>//生成二维码
- <div id="qrcode"></div> //创建一个div,并设置id为qrcode
- <div @click="downs()"></div> //下载图片
- </div>
- </template>
- <script>
- import QRCode from 'qrcodejs2' // 引入qrcode
- export default {
- name : 'test',
data(){
- return{
- link: 'http://test.wx.jia-r.com/temporaryCarIndex.html' //需要生成二维码图片的字符串
- },
}
components:{QRCode },- methods: {
- getQrocde(){
- document.getElementById('qrcode').innerHTML=''
- this.$nextTick (function () {//生成二维码
- this.qrcode();
- })
- },
- qrcode () {
- let that = this;
- let qrcode = new QRCode('qrcode', {
- width: 200,
- height: 200, // 高度
- text: this.link, // 二维码内容
- // render: 'canvas' , // 设置渲染方式(有两种方式 table和canvas,默认是canvas)
- // background: '#f0f', // 背景色
- // foreground: '#ff0' // 前景色
- })
- },
- downs(){
- // //找到canvas标签
- let myCanvas = document.getElementById('qrcode').getElementsByTagName('canvas');
- let img=document.getElementById('qrcode').getElementsByTagName('img')
- // // //创建一个a标签节点
- let a= document.createElement("a")
- // //设置a标签的href属性(将canvas变成png图片)
- let imgURL=myCanvas[0].toDataURL('image/jpg');
- let 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)
- }
- var blob = new Blob([u8arr])
- window.navigator.msSaveOrOpenBlob(blob, '下载' + '.' + 'png')
- }else if(ua.indexOf("Firefox") > -1){ //火狐兼容下载
- let blob = this.base64ToBlob(imgURL); //new Blob([content]);
- let 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 = myCanvas[0].toDataURL('image/png').replace('image/png', 'image/octet-stream')
- a.href=img.src
- //设置下载文件的名字
- a.download = "下载"
- //点击
- a.click()
- }
- },
- //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>
这里分享一个小技巧,通过qrcode生成的二维码本身是没有白边的,这样的二维码并不好看↓
如果想像这样生成一个有白边的二维码,是不是更好看一点,只需要通过css样式即可实现↓
代码如下:
- <style lang='less'>
- #qrcode { //图片有白边填充css
- display: inline-block;
- img {
- width: 132px;
- height: 132px;
- background-color: #fff; //设置白色背景色
- padding: 6px; // 利用padding的特性,挤出白边
- }
- }
- </style>
结束!!
vue2.0生成二维码图片并且下载图片到本地兼容写法的更多相关文章
- canvas生成二维码,并下载保存为本地的图片
function getTicket(id,salt){//qrcode生成canvas二维码 $(".zc-mask").show(); $(".edit-box&qu ...
- C#Qrcode生成二维码支持中文,带图片,带文字
C#Qrcode生成二维码支持中文带图片的操作请看二楼的帖子,当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/2057 ...
- C# Qrcode生成二维码支持中文,带图片,带文字 2015-01-22 15:11 616人阅读 评论(1) 收藏
1.下载Qrcode库源码,下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library 2.打开源码时,部分类库 ...
- Qrcode生成二维码支持中文,带图片,带文字
1.下载Qrcode库源码, 下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library2.打开源码时, 部分类 ...
- 转: jquery.qrcode.js生成二维码插件&转成图片格式
原文地址: https://blog.csdn.net/u011127019/article/details/51226104 1.qrcode其实是通过使用jQuery实现图形渲染,画图,支持can ...
- Swift3.0生成二维码、扫描二维码、相册读取二维码,兼容iOS7(结合ZXingObjC)
二维码生成 //MARK: 传进去字符串,生成二维码图片(>=iOS7) text:要生成的二维码内容 WH:二维码高宽 private func creatQRCodeImage(text: ...
- Jquery生成二维码(微信中长按图片识别二维码功能)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- js生成二维码并保存成图片下载
我这里使用是jQuery,和jquery.qrcode.js,需要的可以自己找链接下载.示例代码仅做参考 html代码: <a id="downloadLink">&l ...
- C#使用Zxing2.0生成二维码 带简单中心LOGO
参考:http://www.open-open.com/lib/view/open1379214678162.html 代码:http://files.cnblogs.com/halo/%E4%BA% ...
随机推荐
- c++json构建与解析组件 RapidJSON 没用过永远不会知道有多好用
参考资料: 官方文档 推荐[腾讯RapidJSON]学习笔记 原理请参考以上资料 构建json Document doc; Document::AllocatorType &allocator ...
- 神经网络 OCR 参考
1. https://blog.csdn.net/u010159842/article/details/87271554 2. https://blog.csdn.net/weixin_4286104 ...
- AI资源对接需求汇总:第3期
更好的阅读体验,请查看首发原文链接:AI资源对接需求汇总:第3期 平台介绍 平台由人工智能领域几个知名原创公众号发起,总读者约25万. 主要面向人工智能领域的从业者,涵盖图像处理.三维计算机视觉.机器 ...
- 新手学习FFmpeg - 调用API完成录屏
调用FFMPEG Device API完成Mac录屏功能. 调用FFMPEG提供的API来完成录屏功能,大致的思路是: 打开输入设备. 打开输出设备. 从输入设备读取视频流,然后经过解码->编码 ...
- Leetcode之回溯法专题-78. 子集(Subsets)
Leetcode之回溯法专题-78. 子集(Subsets) 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = ...
- PHP 递归读取无限级分类
/** * [获取第一级分类] * 20170829 * * @return array */ public function getCateList(){ $this->catelog = [ ...
- VS code 进行 flutter 调试时启动后就停止,无法调试的问题
在编写flutter时,更新需要按 r 或着 R,这就有点麻烦,当然强大的VS code给我们提供了自动更新的功能,那就是调试功能. 首先需要给VS code安装Flutter与Dart插件. 在VS ...
- JUC包实现的同步机制,原理以及简单用法总结
除了用Synchronized关键字修饰同步块,让线程获取某对象的锁实现多线程操作共享变量的同步外,还可以使用java.util.concurrent包.并且,juc包机制下的同步更灵活.juc包的所 ...
- Springboot学习与mybatis逆向生成工具
最近H2数据库越用越觉得方便,在不同办公处无缝继续demo的感觉就是爽. 今天接上一篇Springboot简洁整合mybatis,补上sts(即eclipse)使用mybatis generato ...
- Java内部类使用注意事项
Java内部类使用注意事项: 1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2 public class La ...