DDR爱好者之家 Design By 杰米
昨天写了一篇小程序本地生成二维码的功能小程序本地生成二维码,趁热打铁今天给大家分享一下小程序内生成海报的功能以及具体步骤
这次分享海报里面的元素比较少,进行绘制的分别有头像,海报背景以及二维码(二维码的生成请看上面《小程序本地生成二维码》一文),此次没有涉及到文字的绘制,不过原理大致相同,这篇文章就不对文字绘制进行阐述了。
下面我们就开始吧"text-align: center">
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"color: #ff0000">获取资源
在(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" :style="{width:width+'px;',height: height+'px'}" canvas-id="canvasPoster"></canvas> <img :src="/UploadFiles/2021-04-02/poster">生成之前获取画布信息
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' }) } }) } } }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]