uni用canvas绘制H5端的分享海报

由于微信的直接分享限制较多,改为利用canvas来做分享

花了一天多完成,几个知识点(坑)的记录

1,绘制二维码本来采用功能更丰富的weappQRcode.js,但h5端难以调通,

所以用的是wxqrcode.js,返回的是一个base64,8是url的规范等级,否则长度超出后会报错

this.qr = wxqrcode.createQrCodeImg(window.location.href, {  typeNumber: 8 })

直接用绘图方法就能根据base64画出来

ctx.drawImage(this.qr, x,y,widt, height)

画出来后的分享功能,若是其他平台可以uni.saveImageToPhotosAlbum直接转为图片

但H5端不可以,所以用uni.canvasToTempFilePath转为base64后,再写入img的src

finalHeight的高度是所有高度(例如头部,活动高度,底部)相加乘以2

destWidth是输出宽度,一般情况默认就可以

 

                        uni.canvasToTempFilePath({
                            x: 0,
                            y: 0,
                            width: canvasInfo.width,
                            height: finalHeight,
                            //destWidth: canvasInfo.width,
                            //destHeight: finalHeight,
                            canvasId: 'shareCanvas',
                            success: function(res) {
                                that.canvasImg = res.tempFilePath
                            },

                        })

文字换行,采用的是ctx.measureText拿到一个字的宽度,然后不断遍历计算,有点麻烦但基本解决需求

const oneTextWidth = ctx.measureText(‘一段文字’).width 

因为高度是变化的,所以每次高度增加都要重新绘制一次底色,很蠢的办法,但也没找到其他方法,待解决。

                            ctx.fillStyle = '#fff'
                            ctx.fillRect(0, increasingHeight, canvasInfo.width,  oneTextHeight)

 

posted @ 2022-01-19 20:18  朱依漾  阅读(339)  评论(0编辑  收藏  举报