日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747


使用vue實現HTML頁面生成圖片

 

 

背景

隨著網絡的發展,越來越多的網絡平臺應運而生。如何獲得更多的流量,吸引更多的眼球已經成為網絡平臺生存、發展的必要條件。現在網絡平臺最常見的一種宣傳方式就是人邀人。

我最近就接到一個需求,做一個海報頁面,并且能保存到手機,方便用戶分享給朋友,希望能夠達到人邀人的效果。

 

使用vue實現HTML頁面生成圖片

 

 

給人第一感覺這個需求就是保存圖片的功能,當時梳理是卻發現不是那么簡單:

  1. 動態生成一張帶logo的二維碼
  2. 整個海報的html部分轉化成圖片
  3. 保存圖片至手機相冊

生成帶logo的二維碼

vue_qrcodes生成帶logo的二維碼

安裝

npm install vue_qrcodes -- save
復制代碼

使用

<!--部分html代碼-->
<qrcode :url="qrcodeUrl"
        :iconurl="iconurl"
        :wid="298"
        :hei="278"
        :imgwid="100"
        :imghei="100">
</qrcode>

// 部分js代碼
import qrcode from 'vue_qrcodes'
//...省略其他代碼
components: {
    qrcode
 }
復制代碼

問題來了:二維碼出現了,但是二維碼和logo大小并不是你想要,無法自適應。那就需要我們重置二維碼和logo的樣式。

.logoimg {
      height: 100px !important;
      width: 100px !important;
      margin-top: -50px !important;
      margin-left: -50px !important;
    }
#qrcode {
      margin-top: 20px;
      img {
        height: 278px !important;
        width: 298px !important;
      }
    }
復制代碼

html轉化為base64圖片

html轉化為canvas中我選用組件html2canvas

yarn add html2canvas
復制代碼
import html2canvas from 'html2canvas'
復制代碼

為了防止頁面有閃屏我用了兩個div,一個存放原來的dom,一個存放canvas的生成的圖片,再v-if控制展示的元素。

使用vue實現HTML頁面生成圖片

 

js調用函數:

 

htmlToCanvas() {
  html2canvas(this.$refs.bill, {})
  .then((canvas) => {
    let imageUrl = canvas.toDataURL('image/png'); // 將canvas轉成base64圖片格式
    this.canvasImageUrl = imageUrl;
    this.isDom = false;
  });
}
// 二維碼地址
this.qrcodeUrl = data.data.inviteCodeAddress
// 調用html轉化canvas函數
this.htmlToCanvas(); 
復制代碼

結果如圖:

使用vue實現HTML頁面生成圖片

 

 

頁面轉化成了圖片,但是二維碼沒有展示出來,控制臺報錯:

使用vue實現HTML頁面生成圖片

 

 

除二維碼其他部分已經轉化為圖片,二維碼不顯示,原因有兩種可能:

  • 轉化時二維碼還沒有加載完成
  • 轉化二維碼的過程中報錯了

首先嘗試了nextTick

使用 nextTick 將回調延遲到下次DOM更新循環之后執行

// 二維碼地址
this.qrcodeUrl = data.data.inviteCodeAddress 
this.$nextTick(() => {
    // 跳用html轉化canvas函數
    this.htmlToCanvas(); 
 })
復制代碼

 

使用vue實現HTML頁面生成圖片

 

 

發現二維碼出來了,但是二維碼的大小不對,并且控制臺還是存在報錯。雖然問題沒有完全解決,但是二維碼出現了。可以證明二維碼不展示的原因是,轉化時二維碼沒有加載完成。

再嘗試使用setTimeout

使用 setTimeout 將回調延遲到指定時間之后執行

// 二維碼地址
this.qrcodeUrl = data.data.inviteCodeAddress 
setTimeout(()=>{
    // 調用html轉化canvas函數
    this.htmlToCanvas(); 
}, 200)
復制代碼

查看效果:

 

使用vue實現HTML頁面生成圖片

 

 

注:setTimeout是我目前能想到延遲加載方法。各位大佬們,如果這個有更好的方法解決上面的問題,麻煩給留言,在此謝過。

頁面正常,控制臺沒有報錯,可是logo沒有展示出來。

logo地址是:

iconurl: 'https://static.daojia.com/assets/project/tosimple-pic/LOGO_1576564983633.png',
復制代碼

項目在本地啟動,可能存在跨域問題。

htmlToCanvas() {
      html2canvas(this.$refs.bill, {
        useCORS: true // 解決圖片跨域問題
      }).then((canvas) => {
        // 將canvas轉成base64圖片格式
        let imageUrl = canvas.toDataURL('image/png'); 
        this.canvasImageUrl = imageUrl;
        this.isDom = false;
      }).catch((e) => console.log(e));
    }
復制代碼

至此html成功轉化為圖片。

圖片保存至手機

首先嘗試了JS-SDK中的下載圖片downloadImage

經過各種嘗試并不能實現。

最后采用的是微信長按保存圖片

海報部分已經轉化為圖片,無需再開發,只要提示用戶長按圖片可以保存即可。

 

使用vue實現HTML頁面生成圖片

 

 

注 :各位大佬們如果更好的方法保存圖片至手機相冊,歡迎留言

最后

本文介紹海報保存至手機相冊的實現流程,部分環節上還存在優化空間,歡迎大家批評與指正,共同進步。

分享到:
標簽:HTML
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定