亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序基于Taro的分享圖片功能實踐詳解

2020-03-21 15:52:08
字體:
來源:轉載
供稿:網友

前言

在各種小程序(微信、百度、支付寶)、H5、NativeApp 紛紛擾擾的當下,給大家強烈安利一款基于React的多終端開發利器:京東Taro(泰羅·奧特曼),Taro致力于多終端統一解決方案,一處代碼,多處運行。

Taro支持以React語言開發小程序,支持CSS預處理器,支持實時編譯更新,支持NPM,等等等等,簡直不要太爽!

微信小程序分享圖片功能是經常在小程序業務中出現的,比如學習打卡分享,推廣會員分享,推廣商品分享等等。因為小程序是不支持直接分享圖片到朋友圈的,一般操作為:

  • 生成包含小程序碼(當前也可以是其他特定的信息)的圖片;
  • 用戶點擊保存圖片,下載到本地,再發布到朋友圈;
  • 其他用戶長按識別該小程序碼,進入當前小程序。

今天胡哥給大家分享下,基于Taro框架實現微信小程序分享圖片功能的實踐。

一、搭建Taro項目框架,創建微信小程序

1. 安裝taro腳手架工具

npm install -g @tarojs/cli

2. 初始化taro項目

taro init taro-img-share

3. 編譯項目,開啟Dev模式,生成小程序 -- dist目錄

npm run dev:weapp

4. 微信開發者工具,創建小程序,選擇項目根目錄為taro-img-share下的dist目錄

二、小程序分享圖片功能實踐 --- 打卡圖片分享功能

先上圖,再說話

微信小程序,Taro,分享圖片

效果圖

微信小程序,Taro,分享圖片

點擊保存到相冊

這是重點:使用Canvas繪制圖片并展示,保存圖片到相冊

drawImage()方法負責繪制展示,saveCard()方法負責下載圖片到相冊

src/pages/index/index.js

import Taro, { Component } from '@tarojs/taro'// 引入對應的組件import { View, Text, Button, Canvas } from '@tarojs/components'import './index.scss'export default class Index extends Component { config = {  navigationBarTitleText: '首頁' } /** * 初始化信息 */ constructor () {  this.state = {   // 用戶信息   userInfo: {},   // 是否展示canvas   isShowCanvas: false  } } /**  * getUserInfo() 獲取用戶信息  */ getUserInfo (e) {  if (!e.detail.userInfo) {   Taro.showToast({    title: '獲取用戶信息失敗,請授權',    icon: 'none'   })   return  }  this.setState({   isShowCanvas: true,   userInfo: e.detail.userInfo  }, () => {   // 調用繪制圖片方法   this.drawImage()  }) } /**  * drawImage() 定義繪制圖片的方法  */ async drawImage () {  // 創建canvas對象  let ctx = Taro.createCanvasContext('cardCanvas')    // 填充背景色  let grd = ctx.createLinearGradient(0, 0, 1, 500)  grd.addColorStop(0, '#1452d0')  grd.addColorStop(0.5, '#FFF')  ctx.setFillStyle(grd)  ctx.fillRect(0, 0, 400, 500)  // // 繪制圓形用戶頭像  let { userInfo } = this.state  let res = await Taro.downloadFile({   url: userInfo.avatarUrl  })  ctx.save()  ctx.beginPath()  // ctx.arc(160, 86, 66, 0, Math.PI * 2, false)  ctx.arc(160, 88, 66, 0, Math.PI * 2)  ctx.closePath()  ctx.clip()  ctx.stroke()  ctx.translate(160, 88)  ctx.drawImage(res.tempFilePath, -66, -66, 132, 132)  ctx.restore()  // 繪制文字  ctx.save()  ctx.setFontSize(20)  ctx.setFillStyle('#FFF')  ctx.fillText(userInfo.nickName, 100, 200)  ctx.setFontSize(16)  ctx.setFillStyle('black')  ctx.fillText('已在胡哥有話說公眾號打卡20天', 50, 240)  ctx.restore()  // 繪制二維碼  let qrcode = await Taro.downloadFile({   url: 'https://upload-images.jianshu.io/upload_images/3091895-f0b4b900390aec73.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/258/format/webp.jpg'  })  ctx.drawImage(qrcode.tempFilePath, 70, 260, 180, 180)  // 將以上繪畫操作進行渲染  ctx.draw() } /**  * saveCard() 保存圖片到本地  */ async saveCard () {  // 將Canvas圖片內容導出指定大小的圖片  let res = await Taro.canvasToTempFilePath({   x: 0,   y: 0,   width: 400,   height: 500,   destWidth: 360,   destHeight: 450,   canvasId: 'cardCanvas',   fileType: 'png'  })  let saveRes = await Taro.saveImageToPhotosAlbum({   filePath: res.tempFilePath  })  if (saveRes.errMsg === 'saveImageToPhotosAlbum:ok') {   Taro.showModal({    title: '圖片保存成功',    content: '圖片成功保存到相冊了,快去發朋友圈吧~',    showCancel: false,    confirmText: '確認'   })  } else {    Taro.showModal({    title: '圖片保存失敗',    content: '請重新嘗試!',    showCancel: false,    confirmText: '確認'   })  } } render () {  let { isShowCanvas } = this.state  return (   <View className='index'>    <Button onGetUserInfo={this.getUserInfo} openType="getUserInfo" type="primary" size="mini">打卡</Button>    {/* 使用Canvas繪制分享圖片 */}    {     isShowCanvas &&       <View className="canvas-wrap">       <Canvas         id="card-canvas"        className="card-canvas"        style="width: 320px; height: 450px"        canvasId="cardCanvas" >       </Canvas>       <Button onClick={this.saveCard} className="btn-save" type="primary" size="mini">保存到相冊</Button>      </View>     }   </View>  ) }}

src/pages/index/index.sass

index.js組件中的css樣式

.index { display: flex; align-items: center; justify-content: center; height: 100%;}.canvas-wrap { width: 100%; height: 100%; background: rgba(0, 0, 0, 0.3); position: fixed; top: 0; left: 0; display: flex; align-items: center; justify-content: center; flex-direction: column; .btn-save {  margin-top: 40rpx; }}

注意事項

設置Taro支持ES6的async/await

1.下載@tarojs/async-await

npm install -D @tarojs/async-await

2.app.js中引入

import '@tarojs/async-await'

開發完畢,發布小程序

1.執行打包,生成最終的小程序源碼

npm run build:weapp

2.發布小程序

點擊微信開發者工具上傳按鈕,上傳小程序,然后在微信小程序平臺發布小程序即可。

小結

本文著重介紹了使用Taro實現小程序生成打卡圖片,保存相冊,分享圖片功能的開發原理與實踐步驟,各位童鞋可參考并結合自己的實際業務進行擴展開發。

本文并為深入的對不同手機進行圖片適配,部分值也是設置的固定值(如填充文字的開始坐標與填充的文字長度、大?。?,并未做比例響應。需要進一步交流的小伙伴,可以關注胡哥有話說公眾號,持續關注相關文章,也可直接在文章留言交流。

無論是使用何種框架如Taro、mpvue、wepy等開發小程序分享圖片功能,原理都是一樣的,只不過是在調用方法以及處理邏輯時需要進行響應的小調整

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合中文字幕在线| 国产69精品久久久久9999| 欧美疯狂做受xxxx高潮| 欧美激情欧美激情在线五月| 在线观看91久久久久久| 日韩精品在线观| 日韩视频―中文字幕| 欧美成人四级hd版| 精品视频9999| 日韩欧美在线字幕| 欧美福利视频在线观看| 国产香蕉精品视频一区二区三区| 最近的2019中文字幕免费一页| 亚洲夜晚福利在线观看| 日韩在线免费高清视频| 成人激情视频在线| 黄色精品一区二区| 日韩有码片在线观看| 欧美日韩免费观看中文| 97视频在线观看免费高清完整版在线观看| 亚洲乱码国产乱码精品精天堂| 中文字幕综合一区| 亚洲人在线观看| 日产日韩在线亚洲欧美| 色偷偷88888欧美精品久久久| 人九九综合九九宗合| 精品国偷自产在线视频| 久久国产精品影视| 国产精品久久久91| 亚洲一区二区三区在线免费观看| 国产视频福利一区| 国产精品一二三在线| 色老头一区二区三区| 日韩精品中文在线观看| 国语对白做受69| 欧美性猛交xxxx富婆弯腰| 亚洲a在线观看| 中文字幕成人在线| 美女黄色丝袜一区| 91九色综合久久| 久久久精品一区二区三区| 久久免费少妇高潮久久精品99| 日韩在线观看免费高清完整版| 日韩欧美成人精品| 一区二区三区视频在线| 一区二区在线视频播放| 日韩在线观看免费高清| 亚洲石原莉奈一区二区在线观看| 国产精品电影观看| 欧美一级黑人aaaaaaa做受| 日韩中文字幕在线视频| 国产精品亚洲片夜色在线| 性夜试看影院91社区| 欧美最顶级丰满的aⅴ艳星| 欧美最猛性xxxxx免费| 国产欧美一区二区三区视频| 亚洲欧美在线免费观看| 青青在线视频一区二区三区| 欧美在线一级视频| 国产91ⅴ在线精品免费观看| 色综合天天综合网国产成人网| 一区二区三区www| 亚洲的天堂在线中文字幕| 97在线观看视频国产| 国产999精品视频| 日韩欧美亚洲范冰冰与中字| 精品少妇一区二区30p| 这里只有精品在线播放| 国产精品中文字幕在线观看| 91av在线看| 欧美国产日韩精品| 成人黄色av网站| 最近中文字幕日韩精品| 亚洲欧美另类国产| 日韩av日韩在线观看| 日韩欧美在线视频免费观看| 国产亚洲aⅴaaaaaa毛片| 欧美中文字幕视频在线观看| 亚洲新中文字幕| 亚洲成人黄色在线| 亚洲丁香久久久| 国产欧美精品在线播放| 在线观看欧美视频| www.久久久久久.com| 精品亚洲精品福利线在观看| 2020欧美日韩在线视频| 国产精品自产拍在线观| 91精品久久久久久综合乱菊| 97精品国产91久久久久久| 5252色成人免费视频| 欧美不卡视频一区发布| 久久成人人人人精品欧| 精品综合久久久久久97| 日本一区二区三区在线播放| 久久亚洲综合国产精品99麻豆精品福利| 国产日韩欧美一二三区| 亚洲精品久久久久| 亚洲在线一区二区| 日韩av电影院| 亚洲成人xxx| 亚洲女人天堂av| 2019中文字幕在线免费观看| 日韩在线免费视频观看| 日韩免费观看高清| 日韩在线欧美在线国产在线| 国产做受69高潮| 久久久久久噜噜噜久久久精品| 亚洲一区二区三区777| 欧美日韩一区二区免费视频| 视频在线观看99| 国产精品欧美亚洲777777| 69av成年福利视频| 国产精品入口福利| 亚洲色图国产精品| 成人女保姆的销魂服务| 欧美在线观看视频| 国产日韩欧美自拍| 亚洲精品久久7777777| 91在线观看欧美日韩| 色综合久久天天综线观看| 亚洲精品不卡在线| 日韩精品在线私人| 最近2019好看的中文字幕免费| 久久久黄色av| 国产九九精品视频| 一区二区三区视频在线| 一区二区三区四区在线观看视频| 精品成人国产在线观看男人呻吟| 亚洲成av人乱码色午夜| 欧美美女18p| 青青久久aⅴ北条麻妃| 韩国三级日本三级少妇99| 亚洲片国产一区一级在线观看| 亚洲xxxxx性| 亚洲一区亚洲二区亚洲三区| 57pao成人永久免费视频| 成人免费在线视频网站| 亚洲伊人久久综合| 久久免费成人精品视频| 国产美女久久精品香蕉69| 97国产在线观看| 亚洲欧美成人网| 国产91精品网站| 美女久久久久久久| 亚洲国产一区二区三区在线观看| 欧美性猛交xxxx乱大交极品| 日韩av电影在线免费播放| 亚洲电影免费观看高清完整版在线观看| 久久99国产精品久久久久久久久| 欧美激情视频免费观看| 国产精品一区二区久久久久| 亚洲一区二区三区在线免费观看| 国产精品一香蕉国产线看观看| 91久久久在线| 欧美性xxxxx极品| 91精品国产91久久| 久久亚洲电影天堂| 欧美极品美女视频网站在线观看免费| 国产成人高潮免费观看精品| 亚洲国产日韩欧美综合久久| 91在线|亚洲| 欧美激情亚洲精品| 欧洲成人在线观看| 国产成人精品日本亚洲专区61|