微信小程序 | 使用 canvas 生成朋友圈分享圖片并保存到(dào)手機相冊 ... ... ... .. - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 小程序相關 >

微信小程序 | 使用 canvas 生成朋友圈分享圖片并保存到(dào)手機相冊 ... ... ... ..

發表時(shí)間:2021-3-31

發布人(rén):融晨科技

浏覽次數:163

小程序隻能轉發給好友,或者轉發到(dào)微信群,并不(bù)能轉發到(dào)朋友圈,那麽朋友圈的(de)巨大(dà)流量應該怎麽利用起來(lái)呢?

目前來(lái)看,很多小程序的(de)做法是(shì)生成一張帶小程序碼的(de)圖片,然後用戶可以(yǐ)分享圖片到(dào)朋友圈,通過這(zhè)樣的(de)方式來(lái)導朋友圈的(de)流量。

但是(shì)這(zhè)樣做還是(shì)有一定風險的(de),有可能會被騰訊打上(shàng)誘導分享的(de)标簽,具體可以(yǐ)做到(dào)什麽程度還不(bù)是(shì)很清楚。

怎樣生成圖片并保存呢?這(zhè)篇文章做一些簡單的(de)嘗試,生成一個(gè)帶文字和(hé / huò)小程序碼的(de)圖片,希望能對你有一些啓發。

這(zhè)個(gè)圖片的(de)構成是(shì):一個(gè)矩形,既整塊畫布、文字内容、一條橫線和(hé / huò)一個(gè)小程序碼。

首先來(lái)看 wmxl 文件:

<view>
<canvas style="width:100%;height:{{contentHeight}}px" canvas-id="myCanvas">canvas>
<view class="edit-footer">
<button class="button-done" type="primary" bindtap="savePic">保存圖片button>
view>
view>

使用 來(lái)表示畫布,畫布的(de)寬取屏幕的(de)寬,高根據内容的(de)高度來(lái)動态獲取。

再來(lái)看 js 文件:

drawSquare: function (ctx, height) {
ctx.rect(0, 50, this.data.windowWidth, height);
ctx.setFillStyle("#f5f6fd");
ctx.fill()
}

畫矩形,也(yě)是(shì)整塊畫布的(de)大(dà)小,寬度是(shì)屏幕寬度,高度根據内容多少來(lái)動态設置。

drawFont: function (ctx, content, height) {
ctx.setFontSize(16);
ctx.setFillStyle("#484a3d");
ctx.fillText(content, this.data.offset, height);
}

設置文字大(dà)小,并填充顔色。

drawLine: function (ctx, height) {
ctx.beginPath();
ctx.moveTo(this.data.offset, height);
ctx.lineTo(this.data.windowWidth - this.data.offset, height);
ctx.stroke('#eee');
ctx.closePath();
}

畫線。

createNewImg: function (lineNum) {
let that = this;
let ctx = wx.createCanvasContext('myCanvas');
let contentHeight = lineNum * that.data.lineHeight + 180;
that.drawSquare(ctx, contentHeight);
that.setData({ contentHeight: contentHeight });
let height = 100;
for (let item of that.data.thinkList) {
if (item !== 'a') {
that.drawFont(ctx, item, height);
height += that.data.lineHeight;
}
}
that.drawLine(ctx, lineNum * that.data.lineHeight + 120);
that.drawFont(ctx, that.data.footer, lineNum * that.data.lineHeight + 156);
ctx.drawImage('../../static/images/think.png', that.data.windowWidth - that.data.offset - 50, lineNum * that.data.lineHeight + 125, 50, 50);
ctx.draw();
}

根據文字多少動态計算高度,然後依次畫出(chū)矩形,文字,橫線和(hé / huò)小程序碼。

savePic: function () {
let that = this;
wx.canvasToTempFilePath({
x: 0,
y: 50,
width: that.data.windowWidth,
height: that.data.contentHeight,
canvasId: 'myCanvas',
success: function (res) {
util.savePicToAlbum(res.tempFilePath)
}
})
}

保存圖片。

說(shuō)明一下文字的(de)顯示邏輯,由于(yú)文字是(shì)不(bù)能自動換行的(de),所以(yǐ)需要(yào / yāo)提前設置好文字的(de)大(dà)小和(hé / huò)每行顯示文字的(de)個(gè)數,然後按照每行顯示的(de)個(gè)數來(lái)對文字進行分組,最後再顯示。

以(yǐ)上(shàng)均爲(wéi / wèi)代碼片段,可以(yǐ)到(dào)我的(de) GitHub來(lái)下載源碼。如果有不(bù)清楚的(de)地(dì / de)方歡迎留言。

GitHub 地(dì / de)址:源碼傳送門

相關案例查看更多