小程序目前只支持转发,不支持分享朋友圈,为了能实现分享,很多线上小程序通过生成分享图片,保存到相册来给用户增加分享的可能。

具体思路及简要代码如下:

一: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画图,生成分享图片,画图文字换行相关推荐

  1. 小程序canvas绘制自定义分享图片并分享给好友

    小程序的分享有自己的机制,在页面点击右上角,或者页面中的button 采用open-type=share方式也可以触发onShareAppMessage方法. 文档里面明确说明,分享的图片可以采用网络 ...

  2. 小游戏/小程序如何快速生成分享海报图

    在应用开发过程中,我们会遇到各种各样的分享场景,例如邀请.拉新.分享内容等.分享链接是 Web 时代常见的分享形式,实现也相对容易.但是现在人们时间大都花在了 APP 上,所以应用之间的分享越来越重要 ...

  3. 微信小程序使用html2canvas,微信小程序canvas 2d 引入本地图片并生成分享图

    在小程序基础库 v2.9.0 正式开放一套全新的 Canvas 接口.该接口符合 HTML Canvas 2D 的标准,实现上采用 GPU 硬件加速,渲染性能相比于现有的 Canvas 接口有一倍左右 ...

  4. 微信小程序canvas自定义行走路径及画图及画线覆盖问题以及旋转问题(包含踩过的坑)

    CanvasContext 是旧版的接口,新版 Canvas 2D 接口与 Web 一致 从基础库 1.9.90 开始,本接口 ctx.setLineWidth(5) 停止维护,请使用 CanvasC ...

  5. 记一次微信小程序canvas 2d 生成海报问题

    因项目需要,需要制作海报分享. 如: 事情总是不是那么顺利,canvas生成海报生成中遇到各种奇葩问题.一开始是 wx.canvasToTempFilePath 中获取不到canvas对象,调用返回  ...

  6. 小程序canvas实现(分享朋友圈生成图片)

    业务场景:生成一个浮层图片 实现思路: 设置一个盒子,将canvas生成的图片和保存图片的按钮放里边,当有canvas生成图片的时候这个盒子显示,否则隐藏. 这里需要注意的是,canvas画图片的时候 ...

  7. vue h5网页点击按钮 -- 跳到微信小程序 wx-open-launch-weapp;onMenuShareAppMessage 分享图片不显示,且方法已废弃

    h5网页点击按钮,唤醒微信小程序是否可以做? 可以!!,就是有点限制. 通过wx-open-launch-weapp就可以实现,但是限制 微信服务号才可以使用.也就是说必须是微信环境下. 文章最下边, ...

  8. 小程序canvas文字信息绘制图片,模拟器正常保存图片,真机无法保存图片报错downloadFile:fail downloadFile protocol must be http or https

    最近做小程序有个需求是将文字信息生成图片保存到本地,在PC端模拟器,图片的地址是 可以正常保存,不报错 但是到了真机的时候就报错,并且图片地址也发生改变 解决办法: 先将图片上传到服务器util.up ...

  9. java drawimage图片不完整_微信小程序canvas.drawImage完全显示图片问题的解决

    问题描述 问题产生 对于微信小程序,canvas处理过程中,dramImage默认图片引用是有残缺的 导入初始项目 打开链接(原官网例子),浏览器唤醒微信开发这工具,打开连接之前需要下载好微信开发者工 ...

  10. 微信小程序canvas画布转成图片并在转发里面形成图片转发

    onReady() {var that = thisvar rpx = wx.getSystemInfoSync().windowWidth / 375; //加入rpx进行手机适配const que ...

最新文章

  1. 解释型和编译型编程语言_解释型和编译型编程语言:有什么区别?
  2. 预测性智能的力量:AI 和机器学习将如何改变美国政府决策?
  3. iOS架构-静态库.a打包之资源文件打包成bundle(4)
  4. HashMap在java并发中如何发生死循环
  5. C语言 计算日期是当年的第几天
  6. 博文视点经典新书样章下载
  7. Java学习之路 之 提问及解决篇
  8. jquery 获取指定元素
  9. MAC 电脑安装jdk
  10. 去除黄褐斑的方法,姬净美怎么样
  11. 手把手教你搭建织女星开发板RISC-V开发环境
  12. loop在python中什么意思_python中迭代什么意思
  13. 公众号原主体营业执照已注销 如何办理账号迁移和公证书?
  14. Unity学习笔记(二) 碰撞检测与触发检测
  15. 快速搭建日志系统——ELK STACK
  16. 并行接口电路8255A的基本使用——三种工作方式的时序图的具体讲解
  17. php 验证 繁体,验证码上中文字是繁体
  18. 逃避不一定躲得过,面对不一定最难过
  19. 详解数字美元白皮书:可能和你想的不一样
  20. 云计算上演《西游记》?Gartner报告也有“真假美猴王”

热门文章

  1. Linux 下 zip unzip压缩与解压
  2. FlinkCEP - Complex event processing for Flink
  3. C# OracleParameter 传参 实例
  4. 《构建之法》阅读笔记2
  5. 成就PHP高手的五个必由之路
  6. C# 集合类(四):Hashtable
  7. SQL SERVER 2000 安装问题
  8. pytorch--nn.Sequential学习
  9. 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale...
  10. PHP类继承、接口继承关系概述