最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue中兩種生成二維碼(帶logo)并下載方式總結(jié)

 更新時間:2024年03月15日 08:26:27   作者:元素蘇_  
與后端生成二維碼相比,前端生成二維碼更具有靈活性,下面這篇文章主要給大家介紹了關(guān)于Vue中兩種生成二維碼(帶logo)并下載的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.現(xiàn)在需要在頁面中生成一個二維碼,并附帶上公司的logo

生成的二維碼需要顯示logo,并且點擊可以二維碼可以下載保存,有兩種方案供選擇(vue-qr、qrcode

2.vue-qr庫使用(方案一)

npm i vue-qr@4.0.9

我的nodejs版本12.13.0,大家可以使用cnpm下載更好。

html代碼:

<template>
  <div class="main">
    <div>
      <vue-qr 
        :text="codeText"    
        :size="150"
        :margin="20"
        colorDark="#333"
        backgroundColor="#eee"
        :logoSrc="lgoImg"
        logoScale="0.21"
        logoMargin="25px"
        :callback="getCode"
      ></vue-qr>
    </div>
  </div>
</template>

JS代碼:

<script>
import VueQr from 'vue-qr'
export default {
  name:'QR',
  components:{VueQr},
  data() {
    return {
      codeText: 'https://blog.csdn.net/yuansusu_?spm=1000.2115.3001.53',
      lgoImg: require('../assets/111.png'),
    };
  },
  methods: {
    getCode(codeImg) {
      console.log('二維碼圖片', codeImg);
    },
  }
}
</script>
  1. text是要生成的內(nèi)容
  2. size表示二維碼的寬高,寬高一致
  3. margin二維碼圖像的外邊距, 默認(rèn) 20px
  4. colorDark實點的顏色
  5. backgroundColor背景顏色(背景圖片使用bgSrcgifBgSrc)
  6. logoSrc嵌入中間的logo地址
  7. logoScale用于計算 LOGO 大小的值, 過大將導(dǎo)致解碼失敗, LOGO 尺寸計算公式 logoScale*(size-2*margin), 默認(rèn) 0.2
  8. logoMargin設(shè)置LOGO 標(biāo)識周圍的空白邊框, 默認(rèn)為0
  9. callback生成的二維碼 Data URI 可以在回調(diào)中取得,第一個參數(shù)為二維碼 data URL, 第二個參數(shù)為 props 傳過來的 qid(因為二維碼生成是異步的,所以加個 id 用于排序)

官網(wǎng)文檔:vue-qr - npm(文檔是中文,可以放心食用)

3.qrcode庫使用并帶下載方式(方案二)(推薦)

npm i qrcode@1.5.1

使用qecode配置的logo更為靈活,并且在不是vue項目中也能同樣使用

html(部分)和css代碼:

<div class="qr-code">
    <canvas 
      id="QRCode_header"
      ref="canvas"
      title="掃描二維碼"
    ></canvas>
    <div class="mask-code" @click="saveCode">
      <i></i><span>保存二維碼</span>
    </div>
</div>
<style scoped>
  .qr-code{
    display: flex;
    width:fit-content;
    width:-webkit-fit-content;
    width:-moz-fit-content;
    position: relative;
  }
  .qr-code:hover>div{
    z-index: 0;
  }
  .mask-code{
    position: absolute;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0,0.4);
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    z-index: -1;
  }
  .mask-code i{
    display: inline-block;
    width: 25px;
    height: 25px;
    background-image: url(../assets/save_img.png);
    background-size: cover;
  }
  .mask-code span{
    color: white;
  }
</style>

可以將上面的內(nèi)容封裝到組件中,通過props來傳遞想要生成的內(nèi)容

JS代碼:

<script>
import QRCode from "qrcode"; //引入生成二維碼插件
export default {
  name:'CodeS',
  props:{
    canvasWidth:{
      default:200,
      type:Number
    },
    canvasHeight:{
      default:200,
      type:Number
    },
    url:{
      default:'',
      type:String,
      required:true
    },
    logoUrl:{
      default:'',
      type:String,
      // required:true
    }
  },
  methods:{
    getQRCode() {
      let opts = {
          errorCorrectionLevel: "H",//容錯級別,指二維碼被遮擋可以掃出結(jié)果的區(qū)域比例
          type: "image/png",//生成的二維碼類型
          quality: 0.3,//二維碼質(zhì)量
          margin: 5,//二維碼留白邊距
          width: this.canvasWidth,//寬
          height: this.canvasHeight,//高
          text: "1111",//二維碼內(nèi)容
          color: {
              light: "#eaeaea"http://背景色
          }
      };
      // 將獲取到的數(shù)據(jù)(val)畫到msg(canvas)上,加上時間戳動態(tài)生成二維碼
      QRCode.toCanvas(this.$refs.canvas, this.url, opts, function (error) {
        if(error){
          console.log('加載失?。?);
        }
      });
    },
    saveCode(){
      //下載二維碼
      let base64Img =  this.$refs.canvas.toDataURL('image/jpg');
      //創(chuàng)建下載標(biāo)簽,然后設(shè)置鏈接和圖片名稱
      let a = document.createElement('a')
      a.href = base64Img
      a.download = '二維碼'+Date.now()
      a.click()
      //銷毀元素
      a.remove()
    }
  },
  mounted() {
    this.getQRCode()

    //設(shè)置logo圖標(biāo)
    if(this.logoUrl!= ''){
      let myCanvas = this.$refs.canvas
      let ctx = myCanvas.getContext('2d')
      // 在Canvas畫布 添加圖片
      let img = new Image()
      img.crossOrigin = 'Anonymous';//解決Canvas.toDataURL 圖片跨域問題
      img.src = this.logoUrl;
      img.onload = ()=>{
        //第一個設(shè)置的元素,第二三是位置,后面兩個是寬和高
        //居中的位置計算為 (二維碼寬度-img寬度)/2
        let codeWidth = (this.canvasWidth *0.75)/2
        let codeHeight = (this.canvasHeight * 0.75)/2
        ctx.drawImage(img, codeWidth, codeHeight,this.canvasWidth*0.25,this.canvasHeight*0.25)
      }
    }
  },
}
</script>

errorCorrectionLevel糾錯級別有四個:

  1. L(7%)
  2. M(15%)
  3. Q(25%)
  4. H(30%)

級別越高,logo占的大小就越大。

通過鼠標(biāo)點擊二維碼,就可以將二維碼保存在本地

文檔地址:qrcode - npm(無中文)

總結(jié)

到此這篇關(guān)于Vue中兩種生成二維碼(帶logo)并下載方式的文章就介紹到這了,更多相關(guān)Vue生成二維碼帶logo并下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue router重定向redirect如何傳值問題

    Vue router重定向redirect如何傳值問題

    這篇文章主要介紹了Vue router重定向redirect如何傳值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vant picker 多級聯(lián)動操作

    Vant picker 多級聯(lián)動操作

    這篇文章主要介紹了Vant picker 多級聯(lián)動操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue中配置scss全局變量的步驟

    vue中配置scss全局變量的步驟

    這篇文章主要介紹了vue中配置scss全局變量的步驟,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • 詳解vuex中mutation/action的傳參方式

    詳解vuex中mutation/action的傳參方式

    這篇文章主要介紹了詳解vuex中mutation/action的傳參方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Vue3.0 自己實現(xiàn)放大鏡效果案例講解

    Vue3.0 自己實現(xiàn)放大鏡效果案例講解

    這篇文章主要介紹了Vue3.0 自己實現(xiàn)放大鏡效果案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Vite配置路徑別名的簡單實現(xiàn)方法

    Vite配置路徑別名的簡單實現(xiàn)方法

    Vite項目中我們可以手動將src路徑設(shè)置**@**路徑別名,可以省下很多引入路徑的冗余路徑,下面這篇文章主要給大家介紹了關(guān)于Vite配置路徑別名的簡單實現(xiàn)方法,需要的朋友可以參考下
    2023-04-04
  • 關(guān)于vuex強刷數(shù)據(jù)丟失問題解析

    關(guān)于vuex強刷數(shù)據(jù)丟失問題解析

    這篇文章主要介紹了關(guān)于vuex強刷數(shù)據(jù)丟失問題解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • webpack如何打包一個按需引入的vue組件庫

    webpack如何打包一個按需引入的vue組件庫

    在vue項目開發(fā)中,我們會將經(jīng)常用到的邏輯或模塊抽象成組件,對于那些多個項目都有用到的組件,可以考慮封裝成組件庫,這篇文章主要給大家介紹了關(guān)于webpack如何打包一個按需引入的vue組件庫的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Vue實現(xiàn)點擊按鈕進行上下頁切換

    Vue實現(xiàn)點擊按鈕進行上下頁切換

    這篇文章主要介紹了Vue實現(xiàn)點擊按鈕進行上下頁的切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • vue.js實現(xiàn)只彈一次彈框

    vue.js實現(xiàn)只彈一次彈框

    本篇文章通過代碼實例給大家詳細(xì)講述了一個vue的實例,實現(xiàn)只彈一次彈框功能,一起學(xué)習(xí)分享下。
    2018-01-01

最新評論

聂荣县| 武义县| 巴彦县| 镇雄县| 红桥区| 自治县| 广元市| 罗定市| 沅江市| 海林市| 梁平县| 吴桥县| 宣恩县| 白银市| 湘潭市| 寻甸| 松阳县| 江油市| 泸水县| 桃江县| 墨玉县| 城步| 武穴市| 麟游县| 达日县| 巫山县| 财经| 渝中区| 什邡市| 阳江市| 仁化县| 丰城市| 方山县| 阿拉尔市| 武汉市| 远安县| 花垣县| 新巴尔虎右旗| 乌海市| 浦县| 霍山县|