欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

教你用wxml2canvas將微信小程序頁(yè)面轉(zhuǎn)為圖片

 更新時(shí)間:2022年11月26日 11:33:25   作者:兜兜轉(zhuǎn)轉(zhuǎn)的菜鳥(niǎo)  
如果需要實(shí)現(xiàn)將小程序的頁(yè)面轉(zhuǎn)為圖片,第一步是要先把頁(yè)面轉(zhuǎn)為canvas,再將canvas轉(zhuǎn)為圖片,下面這篇文章主要給大家介紹了關(guān)于用wxml2canvas將微信小程序頁(yè)面轉(zhuǎn)為圖片的相關(guān)資料,需要的朋友可以參考下

最近有個(gè)微信小程序項(xiàng)目,需要將頁(yè)面轉(zhuǎn)為圖片。微信小程序提供的Api是wx.canvasToTempFilePath,這個(gè)方法是將畫布指定區(qū)域的內(nèi)容導(dǎo)出生成指定大小的圖片,但是我們是將頁(yè)面導(dǎo)出圖片,所以可以使用wxml2canvas解決

1、安裝wxml2canvas

npm init
npm install wxml2canvas --save --production

npm init 是npm初始化,這個(gè)時(shí)候根據(jù)編譯器終端一路回車最終會(huì)生成一個(gè)package.json文件

--production 是減少安裝與業(yè)務(wù)無(wú)關(guān)的包,減少項(xiàng)目的體積。

2、引入wxml2canvas

import Wxml2Canvas from 'wxml2canvas'

引入之后需要對(duì)微信開(kāi)發(fā)者工具做出如下設(shè)置,否則引入之后會(huì)報(bào)錯(cuò)

 其次選擇微信開(kāi)發(fā)者工具--》工具---》構(gòu)建npm

這個(gè)時(shí)候就不會(huì)報(bào)錯(cuò)了

3、使用wxml2canvas

首先在需要生成圖片的wxml文件中創(chuàng)建canvas容器以及選擇生成圖片的范圍

<canvas canvas-id="myCanvas" class="myCanvas"></canvas>
<view id="my-canvas" class="my_canvas>
    <view class="header my_draw_canvas">
        <image class="headerImg my_draw_canvas" src="{{order.headerImg}}" data-type="image" data-url="{{order.headerImg}}"></image>
        <text class="headerTitle my_draw_canvas" data-type="text" data-text="您的訂單詳情">您的訂單詳情</text>
    </view>
</view>

每個(gè)需要生成圖片的內(nèi)容,需要注明類型。

text標(biāo)簽對(duì)應(yīng)的data-type='text',image標(biāo)簽對(duì)應(yīng)的data-type=‘image’

data-text=‘需要展示的文本’  data-url='需要展示的圖片'

其他的data-type類型可以參考https://github.com/liudongyun1215/wxml2canvas

這個(gè)鏈接里面包含了許多配置項(xiàng),就不一一列舉了,遇到問(wèn)題的時(shí)候可以參考這個(gè)文檔

js文件的方法

drawMyCanvas() {
        wx.showLoading()
        const that = this
        const query = wx.createSelectorQuery().in(this);
        query.select('#my-canvas').fields({ // 選擇需要生成canvas的范圍
            size: true,
            scrollOffset: true
        }, data => {
            let width = data.width;
            let height = data.height;
            that.setData({
                width,
                height
            })
            setTimeout(() => {
                that.startDraw()
            }, 1500);
       }).exec()
},
startDraw() {
        let that = this
        
        // 創(chuàng)建wxml2canvas對(duì)象
        let drawMyImage = new Wxml2Canvas({
          element: 'myCanvas', // canvas的id,
          obj: that, // 傳入當(dāng)前組件的this
          width: that.data.width * 2,
          height: that.data.height * 2,
          background: '#141415', // 生成圖片的背景色
          progress(percent) { // 進(jìn)度
            // console.log(percent);
          },
          finish(url) { // 生成的圖片
            wx.hideLoading()
            that.savePoster(url)
          },
          error(res) { // 失敗原因
            console.log(res);
            wx.hideLoading()
          }
        }, this);
        let data = {
            // 獲取wxml數(shù)據(jù)
            list: [{
                type: 'wxml',
                class: '.my_canvas .my_draw_canvas',  // my_canvas要繪制的wxml元素根類名, my_draw_canvas單個(gè)元素的類名(所有要繪制的單個(gè)元素都要添加該類名)
                limit: '.my_canvas', // 要繪制的wxml元素根類名
                x: 0,
                y: 0
            }]
        }
        // 繪制canvas
        drawMyImage.draw(data, this);
    },
savePoster() {
        const that = this
        wx.saveImageToPhotosAlbum({
            filePath: that.data.imgUrl,
            success: function() {
                wx.showToast({
                    title: '保存成功',
                    icon: 'none',
                    duration: 1500
                });
            },
            fail(err) {
              if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") {
                wx.showModal({
                  title: '提示',
                  content: '需要您授權(quán)保存相冊(cè)',
                  showCancel: false,
                  success: modalSuccess => {
                    wx.openSetting({
                      success(settingdata) {
                        if (settingdata.authSetting['scope.writePhotosAlbum']) {
                            wx.saveImageToPhotosAlbum({
                                filePath: that.data.imgUrl,
                                success: function () {
                                  wx.showToast({
                                    title: '保存成功',
                                    icon: 'success',
                                    duration: 2000
                                  })
                                },
                            })
                        } else {
                            wx.showToast({
                                title: '授權(quán)失敗,請(qǐng)稍后重新獲取',
                                icon: 'none',
                                duration: 1500
                            });
                        }
                      }
                    })
                  }
                })
              }
            }
          })
      },

4、注意

使用wxml保存圖片的時(shí)候,如果包含在線的圖片鏈接,需要在微信小程序后臺(tái)設(shè)置白名單,將在線鏈接的域名放置downloadFile合法域名里,否則生成圖片的時(shí)候會(huì)報(bào)錯(cuò)

還有就是頁(yè)面上的標(biāo)簽需要有寬度,否則模擬器導(dǎo)出正常,真機(jī)導(dǎo)出樣式就會(huì)亂

總結(jié)

到此這篇關(guān)于用wxml2canvas將微信小程序頁(yè)面轉(zhuǎn)為圖片的文章就介紹到這了,更多相關(guān)微信小程序頁(yè)面轉(zhuǎn)為圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS實(shí)現(xiàn)顯示當(dāng)前日期的實(shí)例代碼

    JS實(shí)現(xiàn)顯示當(dāng)前日期的實(shí)例代碼

    本文通過(guò)實(shí)例代碼給大家介紹了js實(shí)現(xiàn)顯示當(dāng)前日期功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07
  • 微信小程序自定義波浪組件使用方法詳解

    微信小程序自定義波浪組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序自定義波浪組件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JavaScript 異步調(diào)用

    JavaScript 異步調(diào)用

    本文通過(guò)一個(gè)小小題目逐步走進(jìn)javascript 異步調(diào)用問(wèn)題,本文附有解答過(guò)程,感興趣的朋友一起看看吧
    2017-10-10
  • javascript中的altKey 和 Event屬性大全

    javascript中的altKey 和 Event屬性大全

    本文給大家介紹javascript中的altkey和event屬性大全,涉及到altkey和event屬性語(yǔ)法定義及用法,本文介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2015-11-11
  • js事件監(jiān)聽(tīng)器用法實(shí)例詳解

    js事件監(jiān)聽(tīng)器用法實(shí)例詳解

    這篇文章主要介紹了js事件監(jiān)聽(tīng)器用法,以實(shí)例形式較為詳細(xì)的分析了javascript事件監(jiān)聽(tīng)器使用注意事項(xiàng)與相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 簡(jiǎn)單談?wù)凧avascript中類型的判斷

    簡(jiǎn)單談?wù)凧avascript中類型的判斷

    這篇文章主要是對(duì)判斷javascript的數(shù)據(jù)類型的判斷方式進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2015-10-10
  • 詳解JavaScript運(yùn)算符中==和===的區(qū)別

    詳解JavaScript運(yùn)算符中==和===的區(qū)別

    在JavaScript中==運(yùn)算符和===運(yùn)算符是經(jīng)常遇到的,那么二者有哪些區(qū)別呢,本文就來(lái)和大家進(jìn)行簡(jiǎn)單的討論,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2023-05-05
  • 一個(gè)小時(shí)快速搭建微信小程序的方法步驟

    一個(gè)小時(shí)快速搭建微信小程序的方法步驟

    這篇文章主要介紹了一個(gè)小時(shí)快速搭建微信小程序的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • layui實(shí)現(xiàn)數(shù)據(jù)表格自定義數(shù)據(jù)項(xiàng)

    layui實(shí)現(xiàn)數(shù)據(jù)表格自定義數(shù)據(jù)項(xiàng)

    今天小編就為大家分享一篇layui實(shí)現(xiàn)數(shù)據(jù)表格自定義數(shù)據(jù)項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • JavaScript數(shù)組去重的幾種方法效率測(cè)試

    JavaScript數(shù)組去重的幾種方法效率測(cè)試

    JavaScript數(shù)組去重是前端面試酷愛(ài)的問(wèn)題,問(wèn)題簡(jiǎn)單而又能看出程序員對(duì)計(jì)算機(jī)程序執(zhí)行過(guò)程的理解如何。數(shù)組去重的方法有很多,到底哪種是最理想的我不清楚。于是我測(cè)試了下數(shù)組去重的效率。測(cè)試二十萬(wàn)個(gè)數(shù)據(jù),隨著數(shù)據(jù)越多效率很明顯的就體驗(yàn)了出來(lái)。下面來(lái)一起看看吧。
    2016-10-10

最新評(píng)論