时间:2021-07-01 10:21:17 帮助过:109人阅读
随机产生一张图片
拿到微信用户的头像和称呢(自己调后端的接口获取)
把用户头像和称呢和随机产生一张图片合成一张海报
可能上一页用户还有填入的心愿文本也要填入图片中
实现效果图
记录下在实现功能过程中遇到的问题
canvas在微信浏览器中长按无效不能像img一样长按分享(那我就转成img呗)
转成img后在微信开发者工具中能显示,真机无效(欲哭无泪),度娘说可能是图片跨域^-^
用户头像合成还要圆角,我表示不会啊,直接看canvas api文档了对度娘无爱了
canvas填入文字超过指定宽度也要换行,我表示只知道不超多指定宽度的各种文字对齐方式 ctx.textAlign = 'center' ;
canvas在高清屏下模糊的问题(超简单的不知道度娘怎么会那么啰嗦)不就是canvas.witdt=innerWidth*devicePixelRatio
HTML结构
<p class="imgBox" v-cloak> <img :src='imgSrc' v-if="imgSrc" /> </p>
CSS
<style> *{ margin:0; padding:0; } body, html { width: 100%; height: 100%; } .imgBox { width: 100%; height: 100%; } img { width: 100%; display: block; } </style>
script
画图方法步骤
drawCanvasBgImg ()
drawCanvasUserImg (canvas, ctx, dpr)
canvasFillText (canvas, ctx, dpr, circleR)
convertCanvasToImage (canvas)
画活动页分享背景大图 drawCanvasBgImg ()
用户头像 drawCanvasUserImg (canvas, ctx, dpr)
在canvas中画文字
// 填写用户称呢或者用户留言 canvasFillText (canvas, ctx, dpr, circleR) { var fontSizeThis = dpr * 20 + 'px' + ' Arial'; var userNameY = 0;//用户名Y轴坐标 var userMessageX = dpr * 40;//用户留言X轴坐标 var userMessageY = 0;//用户留言Y轴坐标 var lastSubStrIndex = 0;//字符串下标 var lineWidth = 0;//一行宽度 var allTextWidth = 0;//所有字符宽度 ctx.font = fontSizeThis; // 需要用户名是写入用户名 if (this.userName) { userNameY = circleR * 2.5; ctx.fillStyle = "#0094ff"; ctx.textAlign = 'center'; ctx.fillText(this.userName, canvas.width / 2, userNameY); } if (this.userMessage) { userMessageY = userNameY + dpr * 35; ctx.fillStyle = "#000"; // 获取字符宽度 for (var i = 0; i < this.userMessage.length; i++) { allTextWidth += ctx.measureText(this.userMessage[i]).width; } // 字符串长度大于画布区域要换行 if (allTextWidth > canvas.width - 2* userMessageX) { for (var i = 0; i < this.userMessage.length; i++) { lineWidth += ctx.measureText(this.userMessage[i]).width; if (lineWidth > canvas.width - 2*userMessageX) { ctx.textAlign = 'left'; ctx.fillText(this.userMessage.substring(lastSubStrIndex, i), userMessageX, userMessageY); userMessageY += dpr * 25;//设置行高 lineWidth = 0; lastSubStrIndex = i; } if (i == this.userMessage.length - 1) { ctx.fillText(this.userMessage.substring(lastSubStrIndex, i + 1), userMessageX, userMessageY); } } } else { // 小于者居中显示 ctx.textAlign = 'center'; ctx.fillText(this.userMessage, canvas.width / 2, userMessageY); } } this.convertCanvasToImage(canvas); },
相关推荐:
jQuery和CSS3实现APPLE TV海报视差效果实例分享
分享一个用canvas合成海报图片的移动端项目
使用php发送自定义背景、头像、文字的二维码海报并含有提示的微信消息
以上就是html5 canvas 微信海报分享的详细内容,更多请关注Gxl网其它相关文章!