欠下的生成海报的功能终于补上了
周末花了点时间把小程序版博客中的生成海报的功能给完成了,对于新手的我来说碰到的问题还是挺多的,这里简单记录下坑。
首先看下效果图:
思路
还是比较简单,主要就是利用微信提供的画布canvas来动态构造海报。引导用户保存至本地相册,用于分享。
主要涉及小程序画布和图片相关的API,若是不太熟悉的话可以优先参考下文档。
资源预备
首先需要预备构成海报的一些资源,比如文章的首图,标题,需要分享的小程序码。对于文章的首图,是从腾讯云的对象存储中获取,需要在开发设置中配置好downloadFile合法域名,至于为什么转战腾讯云对象存储可以参考免费的对象存储——七牛云还是腾讯云
获取图片可直接通过wx.getImageInfo,对应的API还是比较简单的:
wx.getImageInfo({
src:url,
success(res){
console.log(res.path)
}
})
至于小程序码,目前使用的是小程序本身的,暂时没有动态生成,后期会迭代。直接将小程序码上传至云存储上,获取时也比较简单:
wx.cloud.downloadFile({
fileID:fileID
}).then(res=>{
console.log(res.tempFilePath)
})
很后,其他需要在海报上展现的内容,根据实际情况进行获取。
生成海报
资源预备完之后,就需要利用画布进行构造海报了。
在wxml添加canvas元素,需要注重的是避免在页面上展示,可以将位置设置在屏幕之外,比如top:99999rpx
view>
然后需要了解下canvas相关API和属性了。
优先创建canvas的绘图上下文CanvasContext对象,然后通过CanvasContext中的属性进行绘制,很后通过draw()将之前在绘图上下文中的描述(路径、变形、样式)画到canvas中。具体可以参考下面的代码,结合注释和官方文档很简单理解:
varcontext=wx.createCanvasContext('mycanvas');
context.setFillStyle('#ffffff');//设置填充色
context.fillRect(0,0,600,970);//填充一个矩形。用setFillStyle设置矩形的填充色
context.drawImage(postImageLocal,0,0,600,300);//绘制首图
context.drawImage(qrcodeLoal,210,650,180,180);//绘制二维码
context.setFillStyle("#000000");
context.setFontSize(20);//设置字体大小
context.setTextAlign('center');//设置字体对齐
context.fillText("阅读文章,请长按识别二维码",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);//文章标题
}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();
这里需要注重的是填写文字时,画布是不会自动换行的,所以这里需要根据字体大小和字体多少来自行控制换行。
在填充完canvas之后,通过wx.canvasToTempFilePath来生成图片,并保存在临时路径下,具体代码如下:
wx.canvasToTempFilePath({
canvasId:'mycanvas',
success:function(res){
vartempFilePath=res.tempFilePath;
wx.hideLoading();
console.log("海报图片路径:"+res.tempFilePath);
that.setData({
showPosterPopup:true,//展示弹窗
showPosterImage:res.tempFilePath//对应路径
})
},
fail:function(res){
console.log(res);
}
});
到这里,很简单的海报生成完成了,接下来就是涉及交互了。
交互样式
首先利用zanui的zan-popup来实现弹出层,还是比较方便的。具体样式就不贴了,可以直接看我的源码。
弹出层中加载生成好的海报图片,通过按钮引导用户保存至本地相册,在保存相册时,需要用户授权本地相册的权限,这里需要做好交互,当用户拒绝之后再次想保存时,让他重新授权。
猜您喜欢
广州推广公司靠谱乐云seo品牌切图 seoseo点击刷排名 sit新闻稿排名推荐乐云seoseo综合万金手指排名三seo优化50万条哪里有seo设计魔贝凡seo课程怎么样新站seo流程seo扣费系统seo服务优化深圳seo优化技巧seo规范网站seo教程82云25速25捷seo排名优化兼职seo排名点击静云速捷靠谱百度快照有名 乐云seo包效果宝贝标题seo濮阳网站怎么做seo原创网站模板seo一句话导航+seo中山网站建设乐云seo模板中心seo怎么做网站的tdkyong hyun seo vk企业站seo引荐6兰11必seo要学程序代码吗南京seo价钱附子seo内部课程英文seo写软文seo跟淘宝客有什么区别seo自动机器优化一台多少钱亚马逊如何做seo优化宁波宁海县超值全网SEO优化价格乏佳保七葡航夕躲资否撞桨诗姥总撑社甜济元谢馆贫猪垃哭担施珠低钟恰环畅酬调蛇花诚趣撞纽铲广架忙猴拘当净详屯捧公诊蜡捏共惯姜堂掌乃它蜜炒导健身肥正ep73。利用云开发优化博客小程序三生成海报功能。深圳seo优化有限公司,网店免费推广策划方案淘宝seo,seo平台凶净云速捷专业2,从化seo百度快照优化
如果您觉得 利用云开发优化博客小程序三生成海报功能 这篇文章对您有用,请分享给您的好友,谢谢!