专注连锁门店会员营销管理系统
线上+线下+进销存+收银+会员2020-09-27 作者:秩名
在我们分享小程序时,会有一个图片式的海报,这种功能显示是如何显示的,下面小编为大家解答小程序生成海报保存分享图片完全指南
在小程序中生成海报(包括用户头像和自定义文字)并且保存到本地
利用canvas画布,把用户头像和自定义文字定位好,用户点击按钮保存到本地
解决方案:判断到屏幕尺寸,传到wxml 里面
解决方案:canvas直接支持远程图片,不需要使用这个api
注意这里的宽度是100%,响应式,海报的高posterHeight 是从js里面动态计算的
<canvas canvas-id="starkImg" style="width:100%;height:{{posterHeight}}px;"></canvas>
data: { motto: 'Hello World', hidden: true, userInfo: {}, hasUserInfo: false, windowWidth: '', posterHeight: '', }, onLoad: function () { const poster = { "with": 375, "height": 587 } const systemInfo = wx.getSystemInfoSync() let windowWidth = systemInfo.windowWidth let windowHeight = systemInfo.windowHeight let posterHeight = parseInt((windowWidth / poster.with) * poster.height) this.setData({ windowWidth: windowWidth, posterHeight: posterHeight }) }
const that = this // 图片路径 const imagePath = '../../static/image/common/' let bgimgPromise = new Promise(function (resolve, reject) { console.log('data', that.data) wx.getImageInfo({ src: imagePath + "base.png", success: function (res) { resolve(res); } }) });
初始化的时候,调取,一定在生成海报之前
此处可以存储本地,或使用状态都可以
wxml
// 可以从后端接口获取 或 官方本身远程地址 <button class="share" type="primary" open-type="getUserInfo" bindgetuserinfo="getUserInfo">开始答题(获取用户信息)</button>
js
getUserInfo: function (e) { app.globalData.userInfo = e.detail.userInfo let userInfo = e.detail.userInfo console.log('userInfo', userInfo) // 更新用户信息 // api.post('更新用户信息的url', userInfo) this.setData({ userInfo: e.detail.userInfo, hasUserInfo: true }) },
wxml
bgimgPromise.then(res => { console.log('Promise.all', res) const ctx = wx.createCanvasContext('shareImg') ctx.width = windowWidth ctx.height = posterHeight console.log(windowWidth, posterHeight) // 背景图 ctx.drawImage('../../' + res[0].path, 0, 0, windowWidth, posterHeight, 0, 0) // 头像 ctx.drawImage(that.data.userInfo.avatarUrl, 48, 182, 58, 58, 0, 0) ctx.setTextAlign('center') ctx.setFillStyle('#000') ctx.setFontSize(22) // ctx.fillText('分享文字2:stark.wang出品', 88, 414) ctx.fillText('分享文字1我的博客:https://shudong.wang', 55, 414) ctx.stroke() ctx.draw() })
onLoad: function () { share: function () { var that = this wx.showLoading({ title: '正在制作海报。。。' }) new Promise(function (resolve, reject) { wx.canvasToTempFilePath({ x: 0, y: 0, width: 444, height: 500, destWidth: 555, destHeight: 666, canvasId: 'starkImg', success: function (res) { console.log(res.tempFilePath); that.setData({ prurl: res.tempFilePath, hidden: false }) wx.hideLoading() resolve(res) }, fail: function (res) { console.log(res) } }) }).then(res => { console.log(res) this.save() }) } }
ctx.save() // 对当前区域保存 ctx.beginPath() // 开始新的区域 ctx.arc(73, 224, 38, 0, 2 * Math.PI); ctx.clip(); // 从画布上裁剪出这个圆形 ctx.drawImage(res[1], 36, 186, 94, 94, 0, 0) // 把图片填充进裁剪的圆形 ctx.restore() // 恢复
把头像提前存到本地存储中解决
getImg: function () { let avatarUrl = this.data.userInfo.avatarUrl downLoadFile(avatarUrl).then((res) => { console.log(res) wx.saveFile({ tempFilePath: res.data.tempFilePath, success: function (res) { wx.setStorageSync('avatarUrl', res.savedFilePath) } }) }) },
获取头像
// 头像 let promiseAvatarUrl = new Promise(function (resolve, reject) { resolve(wx.getStorageSync('avatarUrl')) }).catch(res=>{ console.log('catch',res) });
背景还是不变
const that = this let promiseBdImg = new Promise(function (resolve, reject) { console.log('data', that.data) wx.getImageInfo({ src: imagePath + "base1.png", success: function (res) { console.log('promiseBdImg', res) resolve(res); } })
此时生成canvas更新
Promise.all([ promiseBdImg, promiseAvatarUrl ]).then(res => { console.log('Promise.all', res) const ctx = wx.createCanvasContext('shareImg') ctx.width = windowWidth ctx.height = posterHeight console.log(windowWidth, posterHeight) //主要就是计算好各个图文的位置 ctx.drawImage('../../' + res[0].path, 0, 0, windowWidth, posterHeight, 0, 0) ctx.save() // 对当前区域保存 ctx.beginPath() // 开始新的区域 ctx.arc(73, 224, 38, 0, 2 * Math.PI); ctx.clip(); // 从画布上裁剪出这个圆形 ctx.drawImage(res[1], 36, 186, 94, 94, 0, 0) // 把图片填充进裁剪的圆形 ctx.restore() // 恢复 ctx.setTextAlign('center') ctx.setFillStyle('#000') ctx.setFontSize(22) ctx.save() ctx.beginPath(); ctx.fillText('作者:stark.wang', 545 / 2, 130) ctx.fillText('我的博客:http://shudong.wang', 190, 414) ctx.stroke() ctx.draw() })
以上是小程序生成海报保存分享图片完全指南,更多小程序开发内容,请查看本网站,谢谢。
HiShop小程序工具提供多类型商城/门店小程序制作,可视化编辑 1秒生成5步上线。通过拖拽、拼接模块布局小程序商城页面,所看即所得,只需要美工就能做出精美商城。更多小程序商店请查看:小程序商店
线上+线下+进销存+收银+会员门店零售管理好帮手
门店能实现快速收银,提升门店经营效率。
系统自带进销存管理,更好管理库存销售。
配备收银硬件一站式整体服务。
收 银 会员管理 库存管理 商品管理 交接班 数据报表 营销促单 售后处理 多种收款
获取报价1、本网站发布的该篇文章,目的在于分享电商知识及传递、交流相关电商信息,以便您学习或了解电商知识,请您不要用于其他用途;
2、该篇文章中所涉及的商标、标识的商品/服务并非来源于本网站,更非本网站提供,与本网站无关,系他人的商品或服务,本网站对于该类商标、标识不拥有任何权利;
3、本网站不对该篇文章中所涉及的商标、标识的商品/服务作任何明示或暗示的保证或担保;
4、本网站不对文章中所涉及的内容真实性、准确性、可靠性负责,仅系客观性描述,如您需要了解该类商品/服务详细的资讯,请您直接与该类商品/服务的提供者联系。
推荐文章
最新消息总结,开发一个小程序我们可以选择的第三方框架有5种,大家比较熟悉的有美团小程序框架mpvue,还有组件化框架等...
最近在调研小程序的分享能力,本篇文档主要是调研小程序关于分享方面的玩法,目的是学习小程序在项目应用以及玩法链上...
许多人在使用小程序,会有一个很麻烦的事情,就是使用过小程序之后,会不断的发送自己的定位消息,那么这个小程序的...
一款小程序,很多时候需要调用内置的照相机,实现拍照并图片上传,那么要如何实现呢?...
积分商城平台搭建全解析 在数字化营销的浪潮中,积分商城平台已成为众多企业提升用户粘性、促进消费转化的重要工具。...
公众号积分商城搭建百科 在数字化营销蓬勃发展的当下,公众号积分商城已成为企业和品牌提升用户活跃度、增强用户粘性...
积分商城搭建流程全解析 在数字化营销浪潮中,积分商城已成为众多企业提升用户粘性、促进消费转化的得力工具。搭建一...
积分商城搭建需要多少钱 在当今数字化商业环境中,积分商城作为一种有效的用户激励和营销工具,越来越受到企业的青睐...
积分商城小程序百科 积分商城小程序是一种基于移动互联网平台的应用程序,它依托于微信、支付宝等大型平台,为商家和...
积分商城搭建步骤百科 积分商城作为一种激励用户消费和提高用户粘性的工具,在企业营销策略中占据重要地位。它通过积...