微信小程序生成分享海报方法(附带二维码生成
昨天写了一篇小程序本地生成二维码的功能,趁热打铁今天给大家分享一下小程序内生成海报的功能以及具体步骤
这次分享海报里面的元素比较少,进行绘制的分别有头像,海报背景以及二维码(二维码的生成请看上面《小程序本地生成二维码》一文),此次没有涉及到文字的绘制,不过原理大致相同,这篇文章就不对文字绘制进行阐述了。
狼蚁网站SEO优化我们就开始吧🙂
注实现基于mpvue框架,如果使用小程序自有框架直接开发需要少许改动
流程
0-1
0-2
在(0-1)页面点击“生成专属海报” > 跳转到(0-2)页面进行海报
资源前期准备
在生成海报之前需要准备,头像,海报背景图以及二维码
为了在海报生成是页面没有闪动或者卡顿,需要先在(0-1)页面把这些数据准备好
需要注意的是,生成海报时需要时临时文件或者是本地文件,如果是网络图片,需要通过wx.getImageInfo() api获取图片的临时路径
这里头像用到的是网络路径,所以需要获取头像的临时临时路径,海报背景在本地直接用本地路径即可
二维码则通过weapp-qrcode生成后返回临时路径进行使用(生成逻辑详见文章开头“小程序本地生成二维码”)
准备完成后将资源信息以参数的形式传给(0-2)页面
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({ suess (res) { // 通过像素比计算出画布的实际大小(330x490)是展示的出来的大小 this.width = 330 res.pixelRatio this.height = 490 res.pixelRatio } }) // 结构样式 <canvas class="canvas-poster" id="canvasPoster" :style="{width:width+'px;',height: height+'px'}" 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(() => { //狼蚁网站SEO优化的13以及减26推测是因为在写样式的时候写了固定的zoom: 50%而没有用像素比缩放导致的黑边,所以在生成时进行了适当的缩小生成,这个大家可以自行尝试 wx.canvasToTempFilePath({ canvasId: 'canvasPoster', x: 13, y: 13, width: canvasW - 26, height: canvasH - 26, destWidth: canvasW - 26, destHeight: canvasH - 26, suess: (res) => { this.poster = res.tempFilePath } }) }, 200) }, previewImg () { if (this.poster) { //预览图片,预览后可长按保存或者分享给朋友 wx.previewImage({ urls: [this.poster] }) } }, savePoster () { if (this.poster) { wx.saveImageToPhotosAlbum({ filePath: this.poster, suess: (result) => { wx.showToast({ title: '海报已保存,快去分享给好友吧。', icon: 'none' }) } }) } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程