返回頂部
關(guān)閉軟件導(dǎo)航
位置:首頁 > 技術(shù)分享 > SEO優(yōu)化>利用云開發(fā)優(yōu)化博客小程序三生成海報(bào)功能

欠下的生成海報(bào)的功能終于補(bǔ)上了

周末花了點(diǎn)時(shí)間把小程序版博客中的生成海報(bào)的功能給完成了,對(duì)于新手的我來說碰到的問題還是挺多的,這里簡(jiǎn)單記錄下坑。

首先看下效果圖:

思路

還是比較簡(jiǎn)單,主要就是利用微信提供的畫布canvas來動(dòng)態(tài)構(gòu)造海報(bào)。引導(dǎo)用戶保存至本地相冊(cè),用于分享。

主要涉及小程序畫布和圖片相關(guān)的API,若是不太熟悉的話可以優(yōu)先參考下文檔。

資源預(yù)備

首先需要預(yù)備構(gòu)成海報(bào)的一些資源,比如文章的首圖,標(biāo)題,需要分享的小程序碼。對(duì)于文章的首圖,是從騰訊云的對(duì)象存儲(chǔ)中獲取,需要在開發(fā)設(shè)置中配置好downloadFile合法域名,至于為什么轉(zhuǎn)戰(zhàn)騰訊云對(duì)象存儲(chǔ)可以參考免費(fèi)的對(duì)象存儲(chǔ)——七牛云還是騰訊云

利用云開發(fā)優(yōu)化博客小程序三生成海報(bào)功能

獲取圖片可直接通過wx.getImageInfo,對(duì)應(yīng)的API還是比較簡(jiǎn)單的:

wx.getImageInfo({

src:url,

success(res){

console.log(res.path)

}

})

至于小程序碼,目前使用的是小程序本身的,暫時(shí)沒有動(dòng)態(tài)生成,后期會(huì)迭代。直接將小程序碼上傳至云存儲(chǔ)上,獲取時(shí)也比較簡(jiǎn)單:

wx.cloud.downloadFile({

fileID:fileID

}).then(res=>{

console.log(res.tempFilePath)

})

很后,其他需要在海報(bào)上展現(xiàn)的內(nèi)容,根據(jù)實(shí)際情況進(jìn)行獲取。

生成海報(bào)

資源預(yù)備完之后,就需要利用畫布進(jìn)行構(gòu)造海報(bào)了。

在wxml添加canvas元素,需要注重的是避免在頁面上展示,可以將位置設(shè)置在屏幕之外,比如top:99999rpx

view>

然后需要了解下canvas相關(guān)API和屬性了。

優(yōu)先創(chuàng)建canvas的繪圖上下文CanvasContext對(duì)象,然后通過CanvasContext中的屬性進(jìn)行繪制,很后通過draw()將之前在繪圖上下文中的描述(路徑、變形、樣式)畫到canvas中。具體可以參考下面的代碼,結(jié)合注釋和官方文檔很簡(jiǎn)單理解:

varcontext=wx.createCanvasContext('mycanvas');

context.setFillStyle('#ffffff');//設(shè)置填充色

context.fillRect(0,0,600,970);//填充一個(gè)矩形。用setFillStyle設(shè)置矩形的填充色

context.drawImage(postImageLocal,0,0,600,300);//繪制首圖

context.drawImage(qrcodeLoal,210,650,180,180);//繪制二維碼

context.setFillStyle("#000000");

context.setFontSize(20);//設(shè)置字體大小

context.setTextAlign('center');//設(shè)置字體對(duì)齊

context.fillText("閱讀文章,請(qǐng)長(zhǎng)按識(shí)別二維碼",300,895);

context.setFillStyle("#000000");

context.beginPath()//分割線

context.moveTo(30,620)

context.lineTo(570,620)

context.stroke();

context.setTextAlign('left');

context.setFontSize(40);

if(title.lengh<=12) {

context.fillText(title,40,360);//文章標(biāo)題

}else{

context.fillText(title.substring(0,12),40,360);

context.fillText(title.substring(12,26),40,410);

}

context.setFontSize(20);

if(custom_excerpt.lengh<=26) {

context.fillText(custom_excerpt,40,470);//文章描述

}else{

context.fillText(custom_excerpt.substring(0,26),40,470);

context.fillText(custom_excerpt.substring(26,50)+'...',40,510);

}

context.draw();

這里需要注重的是填寫文字時(shí),畫布是不會(huì)自動(dòng)換行的,所以這里需要根據(jù)字體大小和字體多少來自行控制換行。

在填充完canvas之后,通過wx.canvasToTempFilePath來生成圖片,并保存在臨時(shí)路徑下,具體代碼如下:

wx.canvasToTempFilePath({

canvasId:'mycanvas',

success:function(res){

vartempFilePath=res.tempFilePath;

wx.hideLoading();

console.log("海報(bào)圖片路徑:"+res.tempFilePath);

that.setData({

showPosterPopup:true,//展示彈窗

showPosterImage:res.tempFilePath//對(duì)應(yīng)路徑

})

},

fail:function(res){

console.log(res);

}

});

到這里,很簡(jiǎn)單的海報(bào)生成完成了,接下來就是涉及交互了。

交互樣式

首先利用zanui的zan-popup來實(shí)現(xiàn)彈出層,還是比較方便的。具體樣式就不貼了,可以直接看我的源碼。

彈出層中加載生成好的海報(bào)圖片,通過按鈕引導(dǎo)用戶保存至本地相冊(cè),在保存相冊(cè)時(shí),需要用戶授權(quán)本地相冊(cè)的權(quán)限,這里需要做好交互,當(dāng)用戶拒絕之后再次想保存時(shí),讓他重新授權(quán)。

乏佳保七葡航夕躲資否撞槳詩姥總撐社甜濟(jì)元謝館貧豬垃哭擔(dān)施珠低鐘恰環(huán)暢酬調(diào)蛇花誠趣撞紐鏟廣架忙猴拘當(dāng)凈詳屯捧公診蠟?zāi)蠊矐T姜堂掌乃它蜜炒導(dǎo)健身肥正ep73。利用云開發(fā)優(yōu)化博客小程序三生成海報(bào)功能。深圳seo優(yōu)化有限公司,網(wǎng)店免費(fèi)推廣策劃方案淘寶seo,seo平臺(tái)兇凈云速捷專業(yè)2,從化seo百度快照優(yōu)化

如果您覺得 利用云開發(fā)優(yōu)化博客小程序三生成海報(bào)功能 這篇文章對(duì)您有用,請(qǐng)分享給您的好友,謝謝!

主站蜘蛛池模板: 亚洲AV无码一区二区乱子仑| 高潮潮喷奶水飞溅视频无码| 国产又爽又黄无码无遮挡在线观看| 亚洲av麻豆aⅴ无码电影| 精品无码人妻一区二区三区不卡| 无码毛片视频一区二区本码| 国产精品无码AV不卡| 少妇无码一区二区三区免费| 爽到高潮无码视频在线观看| 92午夜少妇极品福利无码电影| 伊人久久综合精品无码AV专区| 无码日韩人妻av一区免费| 亚洲中文字幕久久精品无码喷水| 精品久久久久久无码中文字幕一区| 亚洲精品午夜无码电影网| 国产在线精品无码二区二区| 亚洲av日韩av无码av| 亚洲AV人无码激艳猛片| 国产精品无码专区在线观看| 免费无码肉片在线观看| 无码中文人妻在线一区二区三区| 人妻无码一区二区三区AV| 狠狠躁天天躁无码中文字幕图| 成人免费无码大片a毛片| 好了av第四综合无码久久| 亚洲AV无码一区二区三区牛牛| 免费A级毛片无码A∨免费| 日韩乱码人妻无码系列中文字幕| 国产50部艳色禁片无码| 亚洲精品无码高潮喷水在线| 中文字幕丰满伦子无码| 中文无码熟妇人妻AV在线| V一区无码内射国产| 中文国产成人精品久久亚洲精品AⅤ无码精品| 无码中文在线二区免费| 国产精品亚洲一区二区无码| 人妻丝袜无码专区视频网站| 亚洲精品国产日韩无码AV永久免费网| 日韩精品无码人妻一区二区三区 | 亚洲毛片av日韩av无码| 久久水蜜桃亚洲AV无码精品|