91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序中怎么生成一個分享海報

發布時間:2021-06-16 17:46:32 來源:億速云 閱讀:424 作者:Leah 欄目:web開發

這篇文章給大家介紹微信小程序中怎么生成一個分享海報,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

let shareInfo = {
 headerImg: 'tempfilepath',
 bgImg: '本地路徑的圖片',
 qrcode: 'tempfilepath'
}
wx.navigateTo({
 url: '/pages/createPoster/main?shareInfo=' + JSON.stringify(shareInfo)
})

獲取資源

在(0-2)中獲取參數

我們公司的工程是通過mpvue搭建的,獲取方法是

mounted () {
 const options = this.$root.$mp.query
 this.shareInfo= JSON.parse(options.shareInfo)
}
// 如果是通過微信開發工具直接開發則在onLoad函數中獲取options
onLoad (options) {
 const shareInfo = JSON.parse(options.shareInfo)
}

畫布的樣式

由于在獲取臨時路勁保存圖片的時候用一倍的canvas保存的圖片會很模糊,我們需要對canvas畫布進行多倍處理,一般二倍即可,太大了在Android上可能會出現問題

也可以以像素比為倍率,這樣比較好處理,這里用的是像素比,具體如下

wx.getSystemInfo({
 success (res) {
 // 通過像素比計算出畫布的實際大小(330x490)是展示的出來的大小
 this.width = 330 * res.pixelRatio
 this.height = 490 * res.pixelRatio
 }
})
// 結構樣式
<canvas class="canvas-poster" id="canvasPoster" : canvas-id="canvasPoster"></canvas>
<img :src="poster" class="poster-img" @click="previewImg" alt="">
<div type="button" @click="savePoster" class="save-btn">
 <img src="../img/0.3_btn_yellow_bg.png" alt="">
 <div class="btn-text">保存圖片</div>
</div>
.canvas-poster{
 background-color: #fafafa;
 zoom: 50%; // 將畫布縮小到50%(最好通過像素比進行縮小,像素比是2的話就是50%,如果不全是以像素比為標準,在生成圖片的時候可能會出現四周黑邊)
 position: absolute;
 left: -10000px; // 將畫布隱藏在可視區域外
 background: #206949;
}

生成之前獲取畫布信息

mounted () {
 var query = wx.createSelectorQuery()
 query.select('#canvasPoster').boundingClientRect((res) => {
 // 返回值包括畫布的實際寬高
 this.drawImage(res)
 }).exec()
}

生成邏輯

methods: {
 drawImage (canvasAttrs) {
 let ctx = wx.createCanvasContext('canvasPoster', this)
 let canvasW = canvasAttrs.width // 畫布的真實寬度
 let canvasH = canvasAttrs.height //畫布的真實高度
 // 頭像和二維碼大小都需要在規定大小的基礎上放大像素比的比例后面都會 *this.systemInfo.pixelRatio
 let headerW = 48 * this.systemInfo.pixelRatio
 let headerX = (canvasW - headerW) / 2
 let headerY = 40 * this.systemInfo.pixelRatio
 let qrcodeW = 73 * this.systemInfo.pixelRatio
 let qrcodeX = 216 * this.systemInfo.pixelRatio
 let qrcodeY = 400 * this.systemInfo.pixelRatio
 // 填充背景
 ctx.drawImage(this.shareInfo.bgImg, 0, 0, canvasW, canvasH)
 ctx.save()
 // 控制頭像為圓形
 ctx.setStrokeStyle('rgba(0,0,0,.2)') //設置線條顏色,如果不設置默認是黑色,頭像四周會出現黑邊框
 ctx.arc(headerX + headerW / 2, headerY + headerW / 2, headerW / 2, 0, 2 * Math.PI)
 ctx.stroke()
 //畫完之后執行clip()方法,否則不會出現圓形效果
 ctx.clip()
 // 將頭像畫到畫布上
 ctx.drawImage(this.shareInfo.headerImg, headerX, headerY, headerW, headerW)
 ctx.restore()
 ctx.save()
 // 繪制二維碼
 ctx.drawImage(this.shareInfo.qrcode, qrcodeX, qrcodeY, qrcodeW, qrcodeW)
 ctx.save()
 ctx.draw()
 setTimeout(() => {
 //下面的13以及減26推測是因為在寫樣式的時候寫了固定的zoom: 50%而沒有用像素比縮放導致的黑邊,所以在生成時進行了適當的縮小生成,這個大家可以自行嘗試
 wx.canvasToTempFilePath({
 canvasId: 'canvasPoster',
 x: 13,
 y: 13,
 width: canvasW - 26,
 height: canvasH - 26,
 destWidth: canvasW - 26,
 destHeight: canvasH - 26,
 success: (res) => {
  this.poster = res.tempFilePath
 }
 })
 }, 200)
 },
 previewImg () {
 if (this.poster) {
 //預覽圖片,預覽后可長按保存或者分享給朋友
 wx.previewImage({
 urls: [this.poster]
 })
 }
 },
 savePoster () {
 if (this.poster) {
 wx.saveImageToPhotosAlbum({
 filePath: this.poster,
 success: (result) => {
  wx.showToast({
  title: '海報已保存,快去分享給好友吧。',
  icon: 'none'
  })
 }
 })
 }
 }
}

關于微信小程序中怎么生成一個分享海報就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

炉霍县| 湖口县| 新宾| 化隆| 徐水县| 永丰县| 阿拉善左旗| 南部县| 古田县| 宝清县| 凭祥市| 抚顺县| 谢通门县| 得荣县| 英山县| 洪泽县| 吴堡县| 登封市| 神木县| 蒙自县| 资讯| 宣武区| 韶山市| 德清县| 张家川| 武威市| 刚察县| 辽源市| 商都县| 土默特右旗| 思茅市| 九龙坡区| 云阳县| 荆门市| 孟津县| 蒲江县| 广昌县| 本溪市| 麻江县| 曲麻莱县| 闽侯县|