小程序---canvas画图,生成分享图片,画图文字换行
小程序目前只支持转发,不支持分享朋友圈,为了能实现分享,很多线上小程序通过生成分享图片,保存到相册来给用户增加分享的可能。
具体思路及简要代码如下:
一:canvas画图drawCanvas:function(){var that = this;var contentPic = '/images/pop_pic_default@2x.png'wx.downloadFile({ //当图片为网络图片时,需要先下载到本地,再进行操作,url: contentPic, //否则canvas会加载不到图片,本地的无需这步骤success: function (res) {contentPic = res.tempFilePath}})var ctx = wx.createCanvasContext('shareImg')ctx.fillStyle = '#fff' //这里两句是为了解决canvas生成图片时黑背景的问题ctx.fillRect(0, 0, 562, 788) //填充白色背景ctx.setFontSize(32)ctx.setFillStyle('#333') ctx.setTextAlign('left')ctx.setTextBaseline('middle')var str = '这是标题'this.changLine(true,str,ctx,40,60,36,482)var sourse = that.data.detail.sourcectx.setFontSize(28)ctx.fillText(sourse, 40, this.data.titleY)var date = that.data.detail.publishDatevar sourseX = ctx.measureText(sourse).width+56ctx.setFontSize(24)ctx.setFillStyle('#999')ctx.fillText(date, sourseX, this.data.titleY)var content = that.data.detail.summary.replace(/(^\s*)|(\s*$)/g, "")ctx.setFontSize(28)ctx.setFillStyle('#666')this.changLine(false,content, ctx, 40, this.data.titleY + 60, 36, 482)var picY = this.data.titleY + 168wx.getImageInfo({src: contentPic,success: function (res) {var widthScale = 482 / res.widthvar heightScale = 250 / res.heightvar sx=0,sy=0if (widthScale>heightScale){sy= (res.height-250/(482 / res.width))/2 }else{sx=(res.width-482/(250 / res.height))/2 }ctx.drawImage(contentPic, sx, sy, res.width - sx * 2, res.height - sy * 2, 40, picY, 482, 250 )ctx.moveTo(40, picY + 274)ctx.setStrokeStyle('#dedede')ctx.lineTo(522, picY + 274)ctx.stroke() ctx.setFontSize(28)ctx.setFillStyle('#666')ctx.fillText('长按扫码阅读', 40, picY + 334)ctx.setFontSize(24)// ctx.setFillStyle('#666')ctx.fillText('全文约' + that.data.detail.wordCount + '字,约' + that.data.detail.readingTime + '分钟', 40, picY + 382)// var qrcode = '/images/pic_nanbaobao@2x.png'// ctx.drawImage(qrcode, 344, picY + 274, 178, 178)var logo = '/images/ic_xiaochnegxu@2x.png'ctx.drawImage(logo, 397, picY + 315, 72, 72)ctx.draw(false, function (e) {that.createPoster()})}})},//画图文字换行,内容、画布、初始x、初始y、行高、画布宽changLine: function (isTitle,str, ctx, initX, initY, lineHeight, canvasWidth){// 字符分隔为数组var arrText = str.split('');var line = '';var lineCount=0;var isThreeLine=false;for (var n = 0; n < arrText.length; n++) {var testLine = line + arrText[n];var testWidth = ctx.measureText(testLine).width;if (testWidth > canvasWidth) {if (lineCount==2) {isThreeLine=truevar length = line.length-2;line = line.substring(0, length)+'...';ctx.fillText(line, initX, initY);return false;}lineCount++;ctx.fillText(line, initX, initY);line = arrText[n];initY += lineHeight;} else {line = testLine;}}if (!isThreeLine){ctx.fillText(line, initX, initY);}//记录标题的高度if (isTitle){this.setData({titleY: initY + lineHeight + 8})}},
//生成海报createPoster:function(){var that = thiswx.canvasToTempFilePath({x: 0,y: 0,width: 562,height: 788,destWidth: 1124,destHeight: 1576,canvasId: 'shareImg',fileType: 'jpg',success: function (res) {that.setData({prurl: res.tempFilePath})wx.hideLoading()}})},
大概就这样,若发现问题,请评论指正~
转载于:https://www.cnblogs.com/lichunyan/p/8963584.html
小程序---canvas画图,生成分享图片,画图文字换行相关推荐
- 小程序canvas绘制自定义分享图片并分享给好友
小程序的分享有自己的机制,在页面点击右上角,或者页面中的button 采用open-type=share方式也可以触发onShareAppMessage方法. 文档里面明确说明,分享的图片可以采用网络 ...
- 小游戏/小程序如何快速生成分享海报图
在应用开发过程中,我们会遇到各种各样的分享场景,例如邀请.拉新.分享内容等.分享链接是 Web 时代常见的分享形式,实现也相对容易.但是现在人们时间大都花在了 APP 上,所以应用之间的分享越来越重要 ...
- 微信小程序使用html2canvas,微信小程序canvas 2d 引入本地图片并生成分享图
在小程序基础库 v2.9.0 正式开放一套全新的 Canvas 接口.该接口符合 HTML Canvas 2D 的标准,实现上采用 GPU 硬件加速,渲染性能相比于现有的 Canvas 接口有一倍左右 ...
- 微信小程序canvas自定义行走路径及画图及画线覆盖问题以及旋转问题(包含踩过的坑)
CanvasContext 是旧版的接口,新版 Canvas 2D 接口与 Web 一致 从基础库 1.9.90 开始,本接口 ctx.setLineWidth(5) 停止维护,请使用 CanvasC ...
- 记一次微信小程序canvas 2d 生成海报问题
因项目需要,需要制作海报分享. 如: 事情总是不是那么顺利,canvas生成海报生成中遇到各种奇葩问题.一开始是 wx.canvasToTempFilePath 中获取不到canvas对象,调用返回 ...
- 小程序canvas实现(分享朋友圈生成图片)
业务场景:生成一个浮层图片 实现思路: 设置一个盒子,将canvas生成的图片和保存图片的按钮放里边,当有canvas生成图片的时候这个盒子显示,否则隐藏. 这里需要注意的是,canvas画图片的时候 ...
- vue h5网页点击按钮 -- 跳到微信小程序 wx-open-launch-weapp;onMenuShareAppMessage 分享图片不显示,且方法已废弃
h5网页点击按钮,唤醒微信小程序是否可以做? 可以!!,就是有点限制. 通过wx-open-launch-weapp就可以实现,但是限制 微信服务号才可以使用.也就是说必须是微信环境下. 文章最下边, ...
- 小程序canvas文字信息绘制图片,模拟器正常保存图片,真机无法保存图片报错downloadFile:fail downloadFile protocol must be http or https
最近做小程序有个需求是将文字信息生成图片保存到本地,在PC端模拟器,图片的地址是 可以正常保存,不报错 但是到了真机的时候就报错,并且图片地址也发生改变 解决办法: 先将图片上传到服务器util.up ...
- java drawimage图片不完整_微信小程序canvas.drawImage完全显示图片问题的解决
问题描述 问题产生 对于微信小程序,canvas处理过程中,dramImage默认图片引用是有残缺的 导入初始项目 打开链接(原官网例子),浏览器唤醒微信开发这工具,打开连接之前需要下载好微信开发者工 ...
- 微信小程序canvas画布转成图片并在转发里面形成图片转发
onReady() {var that = thisvar rpx = wx.getSystemInfoSync().windowWidth / 375; //加入rpx进行手机适配const que ...
最新文章
- 解释型和编译型编程语言_解释型和编译型编程语言:有什么区别?
- 预测性智能的力量:AI 和机器学习将如何改变美国政府决策?
- iOS架构-静态库.a打包之资源文件打包成bundle(4)
- HashMap在java并发中如何发生死循环
- C语言 计算日期是当年的第几天
- 博文视点经典新书样章下载
- Java学习之路 之 提问及解决篇
- jquery 获取指定元素
- MAC 电脑安装jdk
- 去除黄褐斑的方法,姬净美怎么样
- 手把手教你搭建织女星开发板RISC-V开发环境
- loop在python中什么意思_python中迭代什么意思
- 公众号原主体营业执照已注销 如何办理账号迁移和公证书?
- Unity学习笔记(二) 碰撞检测与触发检测
- 快速搭建日志系统——ELK STACK
- 并行接口电路8255A的基本使用——三种工作方式的时序图的具体讲解
- php 验证 繁体,验证码上中文字是繁体
- 逃避不一定躲得过,面对不一定最难过
- 详解数字美元白皮书:可能和你想的不一样
- 云计算上演《西游记》?Gartner报告也有“真假美猴王”
热门文章
- Linux 下 zip unzip压缩与解压
- FlinkCEP - Complex event processing for Flink
- C# OracleParameter 传参 实例
- 《构建之法》阅读笔记2
- 成就PHP高手的五个必由之路
- C# 集合类(四):Hashtable
- SQL SERVER 2000 安装问题
- pytorch--nn.Sequential学习
- 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale...
- PHP类继承、接口继承关系概述