关于qrcode:vue项目中生成qr码

在我的项目中呈现二维码常见的性能,实现计划有很多种,我用的是vue-qr 1.先装置 vue-qr npm install vue-qr --save2.申明以及引入 <script>import VueQr from 'vue-qr'; export default {components: { VueQr, },}</script>就是申明引入一个组件 3.应用 <template> <div> <vue-qr :logo-src="logoSrc" :size="200" :margin="0" :auto-color="true" :dot-scale="1" :text="appSrc" /> </div></template><script>export default { data(){ return { logoSrc:"", appSrc:"http://www.baidu.com" } components: { VueQr, }, }}写了个小demohttps://weijunn.github.io/Vue... https://github.com/WeiJunn/Vu... 具体的应用办法能够去官网看 https://www.npmjs.com/package...

January 19, 2022 · 1 min · jiezi

关于qrcode:qrcode-参数传入默认px-数值转换rem

var style = document.body.currentStyle || document.defaultView.getComputedStyle(document.body, ""); let fs = style.fontSize.replace("px", ""); let size = fs * 3.12; var qrcode = new QRCode(this.$refs.qrCodeUrl, { text: url, // 须要转换为二维码的内容 width: size, height: size, colorDark: "#000000", colorLight: "#ffffff", });H5端rem自适应 因为qrcode 参数传入默认px 导致不能正确居中显示二维码,解决采纳获取body.fontSize 计算出px值传入qrcode 实现不同屏幕都可居中

June 24, 2021 · 1 min · jiezi

关于qrcode:vue使用QRCode一键保存到本地

1.开发环境 vue+QRCode2.电脑系统 windows10专业版3.在应用vue开发的过程中,咱们常常会应用到二维码,在这里我抉择的是QRCode,然而咱们可能会遇到须要一键保留到本地,上面我来分享一下如何实现。4.废话不多说,先上效果图: 当我点击 Save Photo To Share 的时候,咱们就能够把这个二维码保留到本地了(就是下载下来的意思)5.在template中增加如下代码: <p ref="qrCodeUrl" class="QrImg" id="qrCode"><div class="inviteSaveBtn" @click="SaveShare"> <van-button>Save Photo To Share</van-button></div>6.在methods中增加如下代码: //留神:只是局部代码// 保留分享 SaveShare() { console.log("我是保留分享事件"); let myCanvas = document.getElementById('qrCode').getElementsByTagName('canvas'); //创立一个a标签节点 let a = document.createElement("a") //设置a标签的href属性(将canvas变成png图片) a.href = myCanvas[0].toDataURL('image/png').replace('image/png', 'image/octet-stream') //设置下载文件的名字 a.download = "二维码"; //点击 a.click() },//留神:这个 a.download的值能够通过传参的办法;倡议应用参数的模式7.本期的分享到了这里就完结啦,心愿对你有所帮忙,让咱们一起致力走向巅峰。

January 22, 2021 · 1 min · jiezi

js-实现js-实现二维码生成二维码生成

我们可以使用qrcodejs来实现js生成二维码,qrcodejs是用于JavaScript的跨浏览器QRCode生成器,可以十分简单的实现二维码生成 一:下载qrcodejs插件 qrcode的地址:https://github.com/davidshimj... 下载下来的qrcode的文件如下,其中qrcode.js和qrcide.min.js就是我们所需要的js,qrcode.min.js是qrcode.js压缩版二:实现二维码生成 1:需要引入的js qrcodejs旨在jquery的前提下实现的,所以我们先需要引入jquery在引入qrcodejs <script type="text/javascript" src="js/jquery.min.js"></script> <!--引入jquery--><script type="text/javascript" src="js/qrcode.js"></script> <!--引入qrcodejs-->2:使用qrcode实现二维码生成 <div id="qrcode" style="width:100px; height:100px; margin-top:15px;"></div><script type="text/javascript"> new QRCode(document.getElementById("qrcode"), "https://wj0511.com");</script>这时候我们访问当前页我们就可以看到我们所生成的二维码了,扫码二维码后访问 https://www.wj0511.com 这里来主要说明以下 new QRCode的一些基本参数 上面我们生成的二维码可以跳转到指定的url,我们还可以设置二维码的一些基本参数,如下 var qrcode = new QRCode(document.getElementById("qrcode"), {text: "https://www.wj0511.com",//扫描二维码后的内容width: 128,//二维码的宽height: 128,//二维码的高colorDark : "#000000",//二维码线条颜色colorLight : "#ffffff",//二维码背景颜色correctLevel : QRCode.CorrectLevel.H //二维码等级});

October 17, 2019 · 1 min · jiezi

前端vuejquery后台java实现生成二维码

最近项目中需要开发生成二维码的功能,便于宣传和使用产品,于是便去研究一番,以下是研究的成果 1.使用jquery生成二维码<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>二维码测试</title> </head> <body> <div id="qrcode" style="display: flex;justify-content: center;margin-top: 100px;"></div> <script type="text/javascript" src="js/jquery/jquery-2.1.4.min.js"></script> <script type="text/javascript" src="js/jquery.qrcode.min.js"></script> <script type="text/javascript"> $('#qrcode').qrcode({ text: "https://www.baidu.com/",//内容 height: 369, width: 369, render: "canvas", //渲染方式有table方式(IE兼容)和canvas方式 typeNumber:-1,//计算模式 background: "#ffffff",//背景颜色 foreground: "#000000",//二维码颜色 correctLevel: QRCode.correctLevel,//二维码纠错级别 L: 1,M: 0,Q: 3,H: 2(默认) src: 'img/icon/r-VY-hpinrya9109218.jpg'//logo }) </script> </body> </html>查看jquery.qrcode.min.js源码可以看出生成的二维码 2.使用vue生成二维码1)使用npm安装vue-qr,成功后引入vue-qr npm install vue-qr --saveimport VueQr from 'vue-qr'2)实现代码 <template> <div class="qr-code-box"> <vue-qr :logoSrc="config.logo" :text="config.value" class="qr-code-pic" :correctLevel="3" :margin="0" :dotScale="0.5"></vue-qr> </div></template><script> import VueQr from 'vue-qr'; export default { data() { return { config: { value: '', logo: require('./r-VY-hpinrya9109218.jpg') } } }, mounted() { this.config.value = "https://www.baidu.com/"; }, components: { VueQr } }</script><style scoped> .qr-code-box{ display: flex; justify-content: center; margin-top: 100px; } .qr-code-pic{ width: 300px; height: 300px; }</style>3)参数配置Correct Level 0-3 容错级别 0-3logoSrc 嵌入至二维码中心的 LOGO 地址dotScale 数据区域点缩小比例,默认为0.35.......可以看https://www.npmjs.com/package... ...

August 21, 2019 · 3 min · jiezi

重构-qrCreater-网址二维码一键生成工具

最近天天加班,无奈。频频要到手机上去测试页面。最快捷的方法就是把网址生成为一个二维码,手机上一扫即可访问。 自己写过一个 chrome 扩展,上一次的版本还停留在 2014 年,当时的我刚刚毕业不久,用的 jquery qr 插件实现。 界面简陋,功能好用,过去了这么多年,现在再来看当年做的,感觉太丑了,而且在 dark mode 下 icon 也看不清了,索性就来改一改。 第一版icon 改成了暗红色,去掉了底部的输入框生成二维码,因为我自己极少用到这个功能。 周末发布,周一就有老同事找我,说你的插件怎么把输入框功能去掉了。 感动,想不到这么多年,老同事一直在用我写的插件,想着抽空完善一下。 第二版今天抽空再次完善了一下,加入了输入框,兼顾美观。 替换了臃肿的 jquery qr,采用了更加小巧的 kjua,最终扩展的体积缩小到了 14.47KiB。 顺便说一句,用 parcel 来打包真的很方便。大家可以在 chrome 应用商店 找到该扩展,如果觉得这个扩展对你有用,请点赞哦。

July 13, 2019 · 1 min · jiezi

Canvas-进阶二写一个生成带logo的二维码npm插件

背景最近接触到的需求,前端生成一个带企业logo的二维码,并支持点击下载它。 实现在前面的文章有讲到如何用 canvas 画二维码,在此基础上再画一个公司logo,并提供下载的方法供调用,再封装成 npm 插件 模块名称: qrcode-with-logos github地址:https://github.com/zxpsuper/qrcode-with-logos npm地址:https://www.npmjs.com/package/qrcode-with-logos 核心代码将整个封装成一个 QrCodeWithLogo类,并提供三个方法: interface IQrCodeWithLogo { toCanvas(): Promise<any>; toImage(): Promise<any>; downloadImage(name: string): void;}class QrCodeWithLogo implements IQrCodeWithLogo { option: BaseOptions; constructor(option: BaseOptions) { this.option = option; return this; } toCanvas = () => { return toCanvas.call(this, this.option); }; toImage = () => { return toImage.call(this, this.option); }; downloadImage = (name: string) => { saveImage(this.option.image, name); };}1. toCanvas()此方法用到了库qrcode的toCanvas方法 export const toCanvas = (options: BaseOptions) => { return renderQrCode(options) .then(() => options) .then(drawLogo);};这里先用qrcode库画出二维码的canvas ...

July 1, 2019 · 4 min · jiezi

在Vue中用canvas实现二维码和图片合成海报

在项目中经常会遇到需要将不同的二维码放到一张通用图片上,提供用户下载简单来说,就是利用canvas将同等比例的二维码在图片上叠加,生成海报 1. 设置相应比例一般来说海报背景都是固定的,可以直接放在public文件夹,二维码可根据后台返回数据,也可用canvas生成,在此不多赘述 import posterBgImg from '../public/images/poster_bg.png';// 海报底图import qrcodeImg from '../public/images/qrcode.png';// 二维码export default{ name: 'qrcode-in-poster', data(){ return { posterBgImg, qrcodeImg, posterSize: 930/650,// 海报高宽比例 qrCodeSize: {// 二维码与海报对应比例 =》 用于设置二维码在海报中的位置 width: 270/650, height: 270/930, left: 190/650, top: 448/650 }, poster: '',// 合成图片 } }};2. 获取屏幕宽度限定移动端最大宽度为 480px computed: { screenWidth(){ let w = document.body.clientWidt || document.documentElement.clientWidth || 375; return w > 480 ? 480 : w ; }};3. 组合图片methods: { combinedPoster(_url){ let that = this, qrcode = this.qrcodeImg; // 二维码地址 console.log("open draw: ", _url, qrcode) let base64 = '', canvas = document.createElement('canvas'), ctx = canvas.getContext("2d"), _w = this.screenWidth * 2, // 图片宽度: 由于手机屏幕时retina屏,都会多倍渲染,在此只设置2倍,如果直接设置等于手机屏幕,会导致生成的图片分辨率不够而模糊 _h = this.posterSize * _w, // 图片高度 _qr_w = this.qrCodeSize.width * _w, // 二维码宽 = 比例 * 宽度 _qr_h = this.qrCodeSize.height * _h, // 二维码高 = 比例 * 高度 _qr_t = this.qrCodeSize.top * _w, // 二维码顶部距离 = 比例 * 宽度 _qr_l = this.qrCodeSize.left * _w; // 二维码左侧距离 = 比例 * 宽度 // 设置canvas宽高 canvas.width = _w; canvas.height = _h; ctx.rect(0, 0, _w, _h); ctx.fillStyle = '#fff'; // 填充颜色 ctx.fill(); // 迭代生成: 第一层(底图)+ 第二层(二维码) // file:文件,size:[顶部距离,左侧距离,宽度,高度] let _list = [ { file: _url, size: [0, 0, _w, _h] }, { file: qrcode, size: [_qr_l, _qr_t, _qr_w, _qr_h] } ]; // 开始绘画 let drawing = (_index) => { // 判断当前索引 =》 是否已绘制完毕 if (_index < _list.length) { // 等图片预加载后画图 let img = new Image(), timeStamp = new Date().getTime(); // 防止跨域 img.setAttribute('crossOrigin', 'anonymous') // 链接加上时间戳 img.src = _list[_index].file + '?' + timeStamp img.onload = function() { // 画图 ctx.drawImage(img, ..._list[_index].size) // 递归_list drawing(_index + 1) } } else { // 生成图片 base64 = canvas.toDataURL("image/png") if (base64) { // 赋值相应海报上 this.$set(that, 'poster', base64) } } } drawing(0) }};mounted(){ // 需要合成海报的图片 this.draw(this.posterBgImg)}4. 下载点击下载合成图片 ...

June 10, 2019 · 2 min · jiezi

react-native中生成二维码和分享图片

在react-native中展示二维码是一个非常麻烦的过程。最好的方法莫过于原生支持画二维码。但是这有一个副作用,需要在原生中添加新的代码。对于不打算很快升级的项目是一个很通过的选择。这里我介绍一种不使用原生的方式来生成二维码,副作用仅仅是需要联网下载一个js文件。当然可以使用本地缓存了,这样就和原生几乎一致了。npm地址实现自定义二维码不添加原生代码的情况下实现react-native中展示二维码,其实利用的正是WebView组件。在前端开发的过程中已经有大神实现了js生成二维码的功能。它就是qrcode.js,熟悉的人已经可以很快想到实现方式了。如果将WebView看做一个类似View的组件,那么在WebView加载完成之后它就已经在展现上与普通组件没有什么区别了。在这个时候就可以看做已经完成了二维码的生成。<WebView automaticallyAdjustContentInsets={false} scalesPageToFit={Platform.OS === ‘android’} contentInset={{ top: 0, right: 0, bottom: 0, left: 0 }} source={{ html: this.html() }} opaque={false} underlayColor={’transparent’} style={{ height: size, width: size }} javaScriptEnabled={true} scrollEnabled={false} onLoad={this.props.onLoad} onLoadEnd={this.props.onLoadEnd} originWhitelist={[’*’]}/>其中的html方法其实就是在生成我们需要的html代码。我们再这里定义几个参数,方便我们使用static defaultProps = { value: “”, size: 100, bgColor: “#fff”, fgColor: “#000”, onLoad: () => { }, onLoadEnd: () => { }, }最终效果如下:产生组件快照很多时候我们还是需要将APP中的某个部分截图保存的。在react-native中,我们可以利用takeSnapshot方法,将组件保存在临时目录中,同时使用CameraRoll.saveToCameraRoll方法将图片放入相册中。有没有想到什么?是的,我们可以在客户端自己生成分享图片。如果你的分享图片用到了很多动态数据。比如:用户不同图片不同,产品或者渠道不同图片也不同。这个时候服务端生成图片会非常的耗资源。同时用户在等待图片生成的过程中也会有很大的延迟。这个时候如果图片能够在客户端中生成岂不是非常的好。速度又快,效果又好。利用上面的二个组件,我们就可以自定义分享图片并下载到用户的相册中。npm地址源代码地址

December 6, 2018 · 1 min · jiezi

使用 qrcodejs 生成二维码的几个问题

博客地址Preface产品希望我这边下载页面加个二维码,可以扫描下载 APP,并且希望二维码中有公司的 logo,很合理的需求,不过实现的时候依旧遇到了几个问题,在此记录下。Main二维码的实现逻辑我当然没有这个时间去研究,直接用的 qrcodejs。官方给的 demo 是最简单的版本,各种各样的需求都是在 issues 里找到的提示,似乎这个库已经很久没有人去维护了,虽然 star 是很多。官网示例(改编)<div id=“qrcode” class=“qrcode”></div>.qrcode { width: 150px; height: 150px; border: 2px solid green; margin-top: 15px;}let qrcodeEl = document.getElementById(‘qrcode’)let qrcode = new QRCode(qrcodeEl, { text: ‘https://avatars1.githubusercontent.com/u/23273077', width: 128, height: 128, colorDark: ‘#000000’, colorLight: ‘#ffffff’, correctLevel: QRCode.CorrectLevel.H})效果如图:尺寸控制我给官网的示例加上了边框,二维码的尺寸和 js 里的尺寸不一样,这个缺点立马就暴露出来了。我很可能是想生成的二维码填满传入的 qrcode 元素的,但是这里的 width 不支持 100%,更不支持 vw 这种尺寸单位了。当然,我可以用 qrcode.offsetWidth 来解决这个问题,但是如果 qrcode 的尺寸后期会动态修改的话,那不还是会有问题么。经 SO 的提示,发现了一个好方案,.qrcode { width: 150px; height: 150px; border: 2px solid green; margin-top: 15px;}.qrcode canvas + img { width: 100%; height: 100%;}这样就可以了,不过仍然有个不足,就是二维码有失真。经测试,只有传入的尺寸和 qrcode 的尺寸一样时,才不会失真,所以传入的尺寸还是需要动态计算。加 logo 的二维码qrcodejs 并没有提供这个 API,issues 里有人给了 demo,其实就是在原有元素上覆盖一个 logo 就可以了,虽然遮盖了原有二维码的一部分,但是实测并不影响扫描。不过我没有进行大规模测试,可能会有一定的错误率。<div id=“qrcode” class=“qrcode”> <img src=“https://avatars1.githubusercontent.com/u/23273077" class=“qrcode__logo”></div>.qrcode { width: 150px; height: 150px; border: 2px solid green; margin-top: 15px; position: relative;}.qrcode canvas + img { width: 100%; height: 100%;}.qrcode__logo { width: 50px; height: 50px; border-radius: 10%; border: 1px solid #fff; position: absolute; margin: auto; left: 0; top: 0; right: 0; bottom: 0;}效果如图:检测二维码的生成某些情况下,我需要重用二维码,在这种情况下,我发现,二维码的生成是异步的,譬如:let qrcodeEl = document.getElementById(‘qrcode’)let qrcode = new QRCode(qrcodeEl, { text: ‘https://avatars1.githubusercontent.com/u/23273077', width: 200, height: 200, colorDark: ‘#000000’, colorLight: ‘#ffffff’, correctLevel: QRCode.CorrectLevel.H})let qrcodeImg = document.querySelectorAll(’.qrcode canvas+img’)console.log(‘qrcodeImg.src’, qrcodeImg.src)setTimeout(function() { console.log(‘qrcodeImg.src’, qrcodeImg.src)}, 1000)第一个日志就是空白的,第二个才有 base64。搞笑的是,qrcodejs 也没有给出回调或者通知告诉用户什么时候生成完毕。这个问题也是在 issues 里找到的提示,关键点在于 MutationObserver。这个 API 很少在项目中用,因为不兼容性 ie11-,但是有时在几千行代码里 debug 时会用,尤其是我怀疑中间有代码改了某个元素的属性,确又找不到证据或者找不到哪段代码时,会用这个来监测下。在这里的用法如下:let qrcodeEl = document.getElementById(‘qrcode’)let qrcode = new QRCode(qrcodeEl, { text: ‘https://avatars1.githubusercontent.com/u/23273077', width: 200, height: 200, colorDark: ‘#000000’, colorLight: ‘#ffffff’, correctLevel: QRCode.CorrectLevel.H})let qrcodeImg = document.querySelector(’.qrcode canvas+img’)listenQrcodeSrc()function listenQrcodeSrc() { var observeConfig = { attributes: true } var observeCb = function(mutationsList, observer) { mutationsList.forEach(function(mutation) { if ( mutation.type.toLowerCase() === ‘attributes’ && mutation.attributeName.toLowerCase() === ‘src’ ) { console.log(‘qrcodeImg src done!’, mutation.target.src) observer.disconnect() } }) } if (typeof MutationObserver !== ‘undefined’) { var observer = new MutationObserver(observeCb) observer.observe(qrcodeImg, observeConfig) }}微信中多个二维码在一起识别错误这个问题,我也遇到了,根据网友的提示,微信是截屏识别的,所以会出现这种问题。我测试的结果是,左右两个,永远识别的右边的那个。网上有好几种方案:调透明度和层级最初尝试过,结果发现失败,等到成功的时候,透明度已经小于 0.5 了,视觉差异太明显,所以放弃了这个方案。替换二维码最终采取的是这个,这个也有问题,就是用户会看到二维码变化的过程,除非你把多个二维码做得很像。假设,我们要显示两个二维码,所谓替换二维码,其实也就是在多个 img.src 属性里切换,可以把实际的二维码保存在 data-real-src 属性里,然后在用户 touchstart 事件中,替换另一个 img 的 src 为当前按下的这个,然后在 touchend 事件中再改回来,因为原来的地址都保存在 data-real-src 属性里。这里就用到了前面提到的检测 src 属性来判断 qrcode 生成完毕,否则一开始直接把 src 属性赋给 data-real-src 属性,就是空白。示例代码(这里代码跟前面脱节了,dom 是另外的结构,仅作为示例代码)://* pubMethods 是类似 jq 的一些 API 的汇总对象var qrcodeImgs = pubMethods.$(’.download__qrcode-box canvas+img’)listenQrcodeSrc()var downloadBox = pubMethods.$(’.download’)[0]downloadBox.addEventListener(’touchstart’, changeQrcodeSrcToOne)downloadBox.addEventListener(’touchend’, changeQrcodeSrcBack)downloadBox.addEventListener(’touchcancel’, changeQrcodeSrcBack)function listenQrcodeSrc() { var observeConfig = { attributes: true } var observeCb = function(mutationsList, observer) { mutationsList.forEach(function(mutation) { if ( mutation.type.toLowerCase() === ‘attributes’ && mutation.attributeName.toLowerCase() === ‘src’ ) { mutation.target.setAttribute(‘data-real-src’, mutation.target.src) observer.disconnect() } }) } qrcodeImgs.forEach(function(ele) { if (typeof MutationObserver !== ‘undefined’) { var observer = new MutationObserver(observeCb) observer.observe(ele, observeConfig) } })}function changeQrcodeSrcToOne(event) { var target = event.target var getQrcodeBox = pubMethods.closest( target, ‘.download__qrcode-box’, downloadBox ) if (getQrcodeBox) { var targetImg = qrcodeImgs.filter(function(ele) { return getQrcodeBox.contains(ele) })[0] qrcodeImgs.forEach(function(ele) { ele.src = targetImg.getAttribute(‘data-real-src’) }) }}function changeQrcodeSrcBack(event) { qrcodeImgs.forEach(function(ele) { ele.src = ele.getAttribute(‘data-real-src’) })}EndingReferenceMake qr code full width微信中有两个挨着二维码长按识别的问题? ...

November 23, 2018 · 2 min · jiezi