一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

注冊登錄

小程序?qū)С雠笥讶笤敿氂涗?

2018-09-18
導讀:小程序提供了轉(zhuǎn)發(fā)給好友的接口,但是沒提供分享到朋友圈的接口。于是,只有引導用戶保存圖片分享到朋友圈。...

小程序提供了轉(zhuǎn)發(fā)給好友的接口,但是沒提供分享到朋友圈的接口。于是,只有引導用戶保存圖片分享到朋友圈。 兩種方案:用微信 api 手動保存,用 painter 。

微信 api

使用原生接口的話,大致是使用 canvas 繪制出海報,然后下載。所以重點是繪制出海報,下載的流程都是一樣的。當然在保存圖片到相冊前,還會需要獲取保存圖片到相冊的權限。總結(jié)下來就是canvas繪制,獲取保存權限,保存圖片這三個步驟。 首先來看繪制海報,需要使用以下接口

  • wx.createCanvasContext 創(chuàng)建 canvas context
  • ctx.drawImage 繪制圖片到 canvas
  • ctx.fillText 寫文字
  • wx.getImageInfo 獲取網(wǎng)絡圖片的 tempFilePath
  • ctx.draw canvas 繪制

繪制的內(nèi)容很簡單,首先就是背景圖;然后是分享者的頭像;接下來是 @ xx 邀請你 這樣一個文本描述;最后就是底部的小程序碼。

首先,創(chuàng)建 canvas 畫布
<canvas canvas-id='canvas' class='canvas' :style="{height: windowHeight + 'px'}"/>
復制代碼

使用小程序 createCanvasContext api ,需要傳入 canvasid

const ctx = wx.createCanvasContext('canvas')
復制代碼

然后將背景圖片繪制出來,背景圖片是放在本地的圖片。

ctx.drawImage('../../../static/assets/img/poster_background.png', 0, 0, this.windowWidth, this.windowHeight)
復制代碼
然后寫上文字
ctx.setFontSize(12);
ctx.setFillStyle('#FFFFFF');
ctx.setTextAlign('center');
ctx.fillText(`${this.privateUserInfo.nickname} 邀您領取`, this.windowWidth / 2, this.transformScale(520))
復制代碼

這里會將原始尺寸和繪制的尺寸等比例轉(zhuǎn)換一下,就不贅述了。再接下來就是繪制小程序碼了。由于小程序碼是帶了分享者的信息,所以必須是臨時獲取的網(wǎng)絡圖片資源,具體怎么獲取帶有分享者信息的小程序碼,會專門寫一篇文章介紹。

繪制圖片

繪制頭像與小程序碼,這兩張圖片都是網(wǎng)絡資源,所以都要使用 wx. getImageInfo 接口將其下載下來放到微信內(nèi)存中,然后使用其response.path 繪制。小程序并不支持直接的繪制網(wǎng)絡圖片,而且也不支持 base64圖片的繪制(雖然模擬器上會有效果)。頭像的繪制還有有一個裁剪圓形頭像的過程。wx.getImageInfo是異步的,所以在回調(diào)函數(shù)里繪制,當然這不是好的方式。可以使用 promise 來解決,由于現(xiàn)在已經(jīng)不用這個代碼了,就沒有去改了。

wx.getImageInfo({
          src: miniProgramCodeSrc,
          success: (response) => {
            const miniProgramCodeSize = this.transformScale(160)
            ctx.drawImage(response.path, this.transformScale(85), this.transformScale(710), miniProgramCodeSize, miniProgramCodeSize)

            wx.getImageInfo({
              src: this.privateUserInfo.avatar,
              success: (response) => {
                const avatarSize = this.transformScale(100)
                //先繪制圓,裁剪成圓形圖片
                ctx.save();
                ctx.beginPath();
                //圓的原點x坐標,y坐標,半徑,起始弧度,終止弧度
                ctx.arc(this.transformScale(320), this.transformScale(425), avatarSize / 2, 0, 2 * Math.PI);
                ctx.setStrokeStyle('#ffffff');
                ctx.stroke();
                ctx.clip();

                ctx.drawImage(response.path, this.transformScale(270), this.transformScale(375), avatarSize, avatarSize)
                ctx.restore();

                ctx.draw(false, () => {
                  this.saveToTempFilePath()
                })
              }
            })
          }
        })
復制代碼

到這一步,繪制基本就結(jié)束了。我們所要的海報內(nèi)容已經(jīng)可以在 canvas 上呈現(xiàn)了,接下來就是將 canvas 的內(nèi)容保存為圖片了。值得提醒的是,ctx.draw這個接口也是異步的,需要在其回調(diào)中執(zhí)行下載的操作。

獲取 tempFilePath
  • wx.canvasToTempFilePath 獲取整個 canvas 的tempFilePath

保存圖片最重要的就是tempFilePath了,使用canvasToTempFilePath 獲取 tempFilePath。需要注意的是canvasToTempFilePath接口二參需要傳入 this。

saveToTempFilePath() {
        wx.canvasToTempFilePath({
          canvasId: 'canvas',
          success: (response) => {
            //獲取相冊授權
          }
        }, this)
      }
復制代碼

獲取 tempFilePath 成功后再獲取保存權限,當然也可以先獲取保存權限,再獲取tempFilePath。

獲取保存權限

首先查看是否有保存權限,有權限就可以直接保存了。沒有權限就先獲取權限,再保存。

  • wx.getSetting 查看權限列表
  • wx.authorize 若沒有保存圖片權限,進行授權
wx.getSetting({
  success: (res) => {
    if (!res.authSetting['scope.writePhotosAlbum']) {
      wx.authorize({
        scope:'scope.writePhotosAlbum',
        success: () => {
          this.saveImageToPhotosAlbumByWX(response.tempFilePath)
        }
      })
    } else {
      this.saveImageToPhotosAlbumByWX(response.tempFilePath)
    }
  }
})
復制代碼
保存圖片到相冊
  • wx.saveImageToPhotosAlbum 保存圖片到相冊

這一步就很簡單了,萬事俱備,只差保存了。調(diào)用 wx.saveImageToPhotosAlbum 即可。

saveImageToPhotosAlbumByWX(tempFilePath) {
        wx.saveImageToPhotosAlbum({
          filePath: tempFilePath,
          complete: () => {
            // 其他操作
          }
        })
      }
復制代碼

到這里,使用原生 api 保存一張分享朋友圈的海報就好了。

painter

painter 是什么呢?

小程序生成圖片庫,輕松通過 json 方式繪制一張可以發(fā)到朋友圈的圖片

painter 是酷家樂開源的小程序圖片生成庫,類似 echarts,使用配置對象渲染圖片到 canvas。渲染完成后回調(diào)會返回 tempFilePath,然后調(diào)用 wx.saveImageToPhotosAlbum 即可保存。保存的步驟和第一種方案一致,關鍵是獲取到 tempFilePath。

按照其 readme 來操作就好了,由于項目是使用了 mpvue,所以使用了 mpvue接入方案 。

使用 painter
<painter v-if="showPainter" class='canvas' @imgOK="onImgOk" :palette="palette"/>
復制代碼

為什么要使用 v-if 呢,需要在所有數(shù)據(jù)都準備好了后再渲染 painter,否則會無限繪制。

data() {
  return {
    //painter 配置數(shù)據(jù)
    palette: {
      width: '640rpx',
      height: '1008rpx',
      background: '/static/assets/img/poster_background.png',
      views: [
        {
          type: 'image',
          url: '',
          css: {
            top: '380rpx',
            left: '320rpx',
            align: 'center',
            width: '100rpx',
            height: '100rpx',
            borderRadius: '50rpx'
          }
        }, {
          type: 'text',
          text: '',
          css: {
            top: '490rpx',
            left: '320rpx',
            align: 'center',
            fontSize: '24rpx',
            color: '#fff'
          }
        },
        {
          type: 'image',
          url: '',
          css: {
            top: '690rpx',
            left: '85rpx',
            width: '180rpx',
            height: '180rpx'
          }
        }
      ]
    }

  }
},

computed: {
  showPainter() {
    const avatar = this.palette.views[0].url
    const text = this.palette.views[1].text
    const qrCodeUrl = this.palette.views[2].url
    return avatar !== '' && text !== '' && qrCodeUrl!== ''
  }
}
復制代碼

在 painter繪制成功的回調(diào)里,將 tempFilePath 保存起來。接下來的權限獲取和保存圖片到相冊流程就和上一個方案一致了。但是,需要提醒的是,tempFilePath 需要放在全局變量中,不能放在data 中。

總結(jié)

總結(jié)一下,遇到的一些坑

  • 小程序canvas不能支持 base64
  • drow 有回調(diào)
  • drawImage 不能直接使用網(wǎng)絡圖片
  • 需要處理獲取權限,用戶拒絕后的場景
重磅推薦:小程序開店目錄

第一部分:小商店是什么

第二部分:如何開通一個小商店

第三部分:如何登錄小商店

第四部分:開店任務常見問題

第五部分:小商店可以賣什么

第六部分:HiShop小程序特色功能

第七部分:小程序直播

第八部分:小程序收貨/物流

第九部分:小程序怎么結(jié)算

第十部分:小程序客服

第十一部分:電商創(chuàng)業(yè)

第十二部分:小程序游戲開發(fā)

電話咨詢 微信咨詢 預約演示 0元開店
主站蜘蛛池模板: 蜜桃=av久久精品人人槡|国产一区二区不卡|色偷偷青青草|欧美精品成人一区二区在线观看|人妻妺妺窝人体色WWW聚色窝|欧美黄色免费视频 | 国内精品久久久久久TV|久久叉叉|动漫=av网|欧美巨猛xxxx猛交黑人97人|亚洲人免费视频|欧洲成年人性生活免费视频 | 亚洲欧美一区二区精品中文字幕|免费=av网站在线|国产=av日韩=a∨亚洲=av|成年=a级毛片免费观看|五月丁香六月综合缴情基地|日本又黄又粗暴的gif动态图 | 国产一区黄|午夜福利国产成人无码GIF动图|骚色综合|国产婬乱=a一级毛片多女|99久久九九国产精品国产免费|久久久久成人精品免费播放动漫 | 毛片大全|日本色频|亚洲色图偷拍自拍|在线观看片=a免费观看岛国|在线中文字幕-区二区三区四区|日韩欧美色图 | 日韩黄色三级在线观看|久久9191|国产不卡一二三|久久中文字幕免费视频|在线观看精品视频|亚洲911精品成人18网站 | 日本=a网址|99性视频|来个毛片|久久久久久国产精品久久|超碰高清在线|色综合色欲色综合色综合色乛 | gogogo高清在线观看中文版二|色老板在线永久免费视频|国产精品美女自拍|不卡网免费理论影院|97碰在线视频|丰满岳乱妇三级高清 | 久久午夜影院|大陆三级毛片|亚洲=av无码专区国产不乱码|2021=av网站|在线国产福利在线观看|亚洲久久一区 | 天天干天天骑|黄色大片免费播放|亚洲精品美女在线观看|伊人看片|日韩欧美伦理片|免费观看91 | 伊人伊成久久人综合网|99久久精品无免国产免费|亚洲精选免费视频|自拍偷拍综合|欧美人禽交zozozo视频|久久久久女人精品毛片九一韩国 | pron麻豆|66lu国产在线观看|久久WWW免费人成一看片|亚洲精品乱码久久久久久久久|国语高潮无遮挡无码免费看|成人在线观看18 | 亚洲人片在线观看天堂无码|国产肥白大熟妇bbbb|天堂а在线地址8最新版|精品精品99|波多野结衣激情XXⅩXXX|国产伦精品免编号公布 | 精品国产乱码久久久久乱码|最新在线观看=av|久久亚洲国产精品五月天|337P日本欧洲亚洲大胆精筑|性动态图=aV无码专区|免费观看又色又爽又湿的视频 | 啄木乌欧美一区二区三区高压监狱|久久综合狠狠|日本亚欧乱色视频在线观看|亚洲=av毛片久久久久|国产亚洲精品二区|波多野结衣免费观看视频 | 小早川怜子痴女在线精品视频|国产+免费+无码|#NAME?|午夜无码成人免费视频|国产精品成人一区视频网站|色综合桃花网 亚洲女人天堂在线|四虎福利影院|日韩视频在线观看视频|欧美日韩成人一区|黑人异族巨大巨大巨粗|超碰在线c=ao | 在线播放成人网站|国产真实younv在线|久久久久国色=av免费看|国产第一页线路1|国产高清免费=av在线|国产一区二区成人h动漫精品 | 精品国产乱码久久久久乱码|最新在线观看=av|久久亚洲国产精品五月天|337P日本欧洲亚洲大胆精筑|性动态图=aV无码专区|免费观看又色又爽又湿的视频 | 特级毛片内射www无码|日韩激情无码激情=a片免费软件|伊人狠狠色丁香婷婷综合动态图|高清性色生活视频|色噜噜狠狠狠狠色综合久一|久久精品免费视频播放 | 大胆L少妇BBBBBB流水|欧美操日韩|麻豆视传媒精品=aV|大地资源色婷婷视频在线|亚洲影视一区二区三区|成年男女免费视频在线观看不卡 | 成人国产精品免费视频|免费视频97|成年人深夜福利|国产精品亚洲一区二区三区在线观看|亚洲性久久9久久爽|超碰超碰97 | 日本xxx大片免费观看|久色在线三级三级三级免费看|视频一区在线播放|国产=a∨国片精品白丝美女视频|天美传媒=aV成人片免费看|成人天堂yy6080亚洲高清 | chinese一区二区|亚洲国产综合在线播放=av66|午夜视频=a|99热这里|夜夜操影院|#NAME? | 青草国产精品久久久久久|公和我做好爽添厨房中文字幕|99re6这里有精品热视频|六月婷婷精品视频在线观看|女教师办公室被强在线播放|日韩一区二区三区不卡视频 | 精品日本一区二区三区在线观看|日日操夜夜摸|国产成人无码网站m3u8|欧美性猛交xx|亚洲自拍偷拍一区二区|国产免费无码成人=a片在线观看 | 26uuu欧美一级|欧美日韩免费|女人被黑人躁得好爽视频|国产肉体XXXX裸体784大胆|四虎最新网址|欧美色v | 成人国产精品免费视频|免费视频97|成年人深夜福利|国产精品亚洲一区二区三区在线观看|亚洲性久久9久久爽|超碰超碰97 | 男同免费|久久久久久草莓香蕉步兵|亚洲女女女同性VIDEO|免费的=av不用播放器的|黄频网站在线观看|久久久88 | 91视频网国产|粗大猛烈进出高潮视频|精品国产乱码久久久人妻|亚洲精品无码久久毛片波多野吉衣|成人久久免费视频|国产美女自拍 | 午夜爱爱网站|国产=a情人一区二区国产|#NAME?|国产精品91网站|少妇搡BBBB搡BBB搡造水多|羞羞答答国产xxdd亚洲精品 | 精品精品在线视频|男女18禁啪啪无遮挡|国产一二三区精品视频|yy6080午夜|天天操综合网站|久久免费精品视频 | #NAME?|国产精品美女久久久久网站|h在线免费观看|男人操女人免费看|一级毛片在线播放|黄色=av小说 | 国产一区二区三区久久悠悠色=av|成人免费视频看看|久久国产精品-国产精品|男人J进女人J啪啪无遮挡|成人片黄网站=a毛片免费|久久精品91视频 | 激情欧美一区二区三区免费看|亚洲青青草|国产精品免费久久久久影视|日本亚洲欧洲免费无码|国产精品XXX大片免费观看|国产一级片网 | 成人=av一区二区三区在线观看|欧美日韩中文字幕一区二区三区|#NAME?|青青草视频网|日韩=av在线一区二区三区|老司机在线精品视频播放 | 96精品国产|国产图区|亚洲最大=aV网站在线观看|精品一区二区三区影院|久久精品国产99国产|1024免费看 | 久久激情久久|国产人妻久久精品二区三区|国产人妖=av|中日韩免费=av|日本一区2区|欧美亚洲国产第一精品久久 | 1级黄色毛片|福利久久久|欧美又爽又大又黄=a片|国产精品拍自在线|中文字幕在线观看亚洲|国产日韩视频在线 | 国内精品久久国产|国产一区二区三区内射高清|一二三四视频在线社区中文字幕2|大地资源在线观看中文免费|午夜精品免费观看|无码成人18禁动漫网站 | 69视频在线观看|不卡的=av在线播放|羞羞色男人的天堂|蜜臀=av夜夜澡人人爽人人|一区二区三区黄|成年人在线免费网站 色一色成人网|久草在线影|精品视频在线观看99|国产香蕉尹人视频在线|亚洲=a∨好看=av高清在线观看|亚洲欧美日本在线 | 欧美在线视频三区|国产中文原创|日本午夜免费福利视频|国产色综合色产在线视频|综合国产精品|猫咪成人在线观看 |