微信小程序生成海报方案
前段时间因为业务需求,需要在微信小程序里分享海报,于是在网上找到了这个方案。此处主要是搬运了网上的内容,加上我自己融合的组件的下载内容。具体如下:
第一步:下载组件
下载组件:Painter 一款轻量级的小程序海报生成组件
下载地址(github地址):Kujiale-Mobile/Painter: 小程序生成图片库,轻松通过 json 方式绘制一张可以发到朋友圈的图片 (github.com)
Painter库地址: https://github.com/Kujiale-Mobile/Painter
Painter组件地址: https://github.com/Kujiale-Mobile/PainterCore
组件包含内容:
第二步:把该组件下载下来,并放入你自己的微信小程序里。(建议你先了解过微信小程序第三方组件后再阅读本方案:自定义组件 | 微信开放文档 (qq.com))
第三步:在自定义组件中引入并使用该 Painter组件:
详细使用步骤如下:
1、首先我们新增一个自定义组件 share-box ,在该组件的json中引入painter组件:
{
"component": true,
"usingComponents": {
"painter": "/painter/painter"
}
}
2、然后在 share-box 组件的WXML 中写入:
// 将该组件定位在屏幕之外,用户查看不到。
<painter style="position: absolute; top: -9999rpx;" palette="{{imgDraw}}" bind:imgOK="onImgOK" />
3、接下来是share-box自定义组件里的js代码,这个代码主要是描述你需要绘制的海报的配置内容:
Component({
properties: {
// 是否开始绘图
isCanDraw: {
type: Boolean,
value: false,
observer(newVal) {
newVal && this.handleStartDrawImg()
}
},
// 用户头像昵称信息
userInfo: {
type: Object,
value: {
avatarUrl: '',
nickName: ''
}
}
},
data: {
imgDraw: {}, // 绘制图片的大对象
sharePath: '' // 生成的分享图
},
methods: {
handleStartDrawImg() {
wx.showLoading({
title: '生成中'
})
this.setData({
imgDraw: {
width: '750rpx',
height: '1334rpx',
background: 'https://qiniu-image.qtshe.com/20190506share-bg.png',
views: [
{
type: 'image',
url: 'https://qiniu-image.qtshe.com/1560248372315_467.jpg',
css: {
top: '32rpx',
left: '30rpx',
right: '32rpx',
width: '688rpx',
height: '420rpx',
borderRadius: '16rpx'
},
},
{
type: 'image',
url: this.data.userInfo.avatarUrl || 'https://qiniu-image.qtshe.com/default-avatar20170707.png',
css: {
top: '404rpx',
left: '328rpx',
width: '96rpx',
height: '96rpx',
borderWidth: '6rpx',
borderColor: '#FFF',
borderRadius: '96rpx'
}
},
{
type: 'text',
text: this.data.userInfo.nickName || '青团子',
css: {
top: '532rpx',
fontSize: '28rpx',
left: '375rpx',
align: 'center',
color: '#3c3c3c'
}
},
{
type: 'text',
text: `邀请您参与助力活动`,
css: {
top: '576rpx',
left: '375rpx',
align: 'center',
fontSize: '28rpx',
color: '#3c3c3c'
}
},
{
type: 'text',
text: `宇宙最萌蓝牙耳机测评员`,
css: {
top: '644rpx',
left: '375rpx',
maxLines: 1,
align: 'center',
fontWeight: 'bold',
fontSize: '44rpx',
color: '#3c3c3c'
}
},
{
type: 'image',
url: 'https://qiniu-image.qtshe.com/20190605index.jpg',
css: {
top: '834rpx',
left: '470rpx',
width: '200rpx',
height: '200rpx'
}
}
]
}
})
},
onImgErr(e) {
wx.hideLoading()
wx.showToast({
title: '生成分享图失败,请刷新页面重试'
})
//通知外部绘制完成,重置isCanDraw为false
this.triggerEvent('initData')
},
onImgOK(e) {
wx.hideLoading()
// 展示分享图
wx.showShareImageMenu({
path: e.detail.path,
fail: err => {
console.log(err)
}
})
//通知外部绘制完成,重置isCanDraw为false
this.triggerEvent('initData')
}
}
})
4、在share-box自定义组件的wxss里写入:
.share-wrap {
width: 100%;
visibility: hidden;
} .share-wrap.active {
visibility: visible;
} .share-back {
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.6);
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 888;
opacity: 0;
transition: all .3s;
} .share-back.active {
opacity: 1;
transition: all .3s;
} .share-container {
width: 100%;
background: #FFF;
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 999;
border-radius: 16rpx 16rpx 0 0;
transform: translateY(100%);
transition: all .3s;
} .share-container.active {
transform: translateY(0%);
transition: all .3s;
} .close {
width: 30rpx;
height: 30rpx;
overflow: hidden;
position: absolute;
right: 64rpx;
top: 64rpx;
} .close::after {
transform: rotate(-45deg);
} .close::before {
transform: rotate(45deg);
} .close::before,
.close::after {
content: '';
position: absolute;
height: 3rpx;
width: 100%;
top: 50%;
left: 0;
margin-top: -2rpx;
background: #9C9C9C;
} .share-image {
width: 420rpx;
margin: 66rpx auto 0;
display: block;
border-radius: 16rpx;
box-shadow: 0px 4rpx 8px 0px rgba(0, 0, 0, 0.1);
} .share-tips {
width: 100%;
text-align: center;
color: #3C3C3C;
font-size: 28rpx;
margin: 32rpx 0;
} .save-btn {
width: 336rpx;
height: 96rpx;
margin: 0 auto 94rpx;
background: url('https://qiniu-image.qtshe.com/20190506save-btn.png') center center;
background-size: 100% 100%;
}
5、接下来就是使用这个自定义组件share-box:
在我们要生成海报的页面引入我们的自定义组件share-box,如下:
(1)在页面的json文件中引入自定义组件share-box:
{
"usingComponents": {
"share-box": "./components/shareBox/index"
}
}
(2)在页面WXML中引入自定义组件share-box:
<share-box isCanDraw="{{isCanDraw}}" userInfo="{{userInfo}}" bind:initData="onClose" />
(3)在页面js中引入:
const app = getApp() Page({
data: {
isCanDraw: false
},
// 组件内部关掉或者绘制完成需重置状态
handleClose() {
this.setData({
isCanDraw: !this.data.isCanDraw
})
},
getUserInfo(e) {
wx.getUserProfile({
desc: "获取您的头像昵称信息",
success: res => {
const { userInfo = {} } = res
this.setData({
userInfo,
isCanDraw: true // 开始绘制海报图
})
},
fail: err => {
console.log(err)
}
})
}
})
(4)最后就绘制完成:
以上内容是由我结合原作者分享的内容编写的,欢迎大家前往原作者的文章查看详细用法:
原文地址: https://developers.weixin.qq.com/community/develop/article/doc/000ac686c5c5506f18b87ee825b013
原文作者提示:
tips:
文字居中实现可以看下代码片段
文字换行实现(maxLines)只需要设置宽度,maxLines如果设置为1,那么超出一行将会展示为省略号
代码片段:https://developers.weixin.qq.com/s/J38pKsmK7Qw5 附上painter可视化编辑代码工具:点我直达,因为涉及网络图片,代码片段设置不了downloadFile合法域名,建议真机开启调试模式,开发者工具 详情里开启不校验合法域名进行代码片段的运行查看。
最后看下面大家评论问的较多的问题:downLoadFile合法域名在小程序后台 开发>开发设置里配置,域名为你图片的域名前缀 比如我文章里的图https://qiniu-image.qtshe.com/20190605index.jpg。配置域名时填写https://qiniu-image.qtshe.com即可。如果你图片cdn地址为https://aaa.com/xxx.png, 那你就配置https://aaa.com即可。
另外:这里提供一个生成share-box自定义组件里的js代码,这个代码主要是描述你需要绘制的海报的配置内容的工具:
工具地址:https://lingxiaoyi.github.io/painter-custom-poster/
由于使用该工具生成的json代码,所以这个我用到另外一个工具来将json转换为js对象:(要注意的是,这个海报的配置内容工具生成的json中首尾含有我们可能用不到的几行代码,大家自行删除后再用如下json转js工具转换成js后粘贴到对应的share-box自定义组件里的js代码里即可)
工具地址:https://uutool.cn/json2obj/
注意:原作者提供了代码片段,大家可以访问查看代码片段,这里我也把原作者的小程序代码片段地址贴出来:https://developers.weixin.qq.com/s/J38pKsmK7Qw5
微信小程序生成海报方案的更多相关文章
- 微信小程序生成海报分享:canvas绘制文字溢出如何换行
主要思路: 1.先分割为字符串数组,然后一个字一个字绘图,利用ctx.measureText(string) 方法,获取绘制后的宽度,判断宽度在多少内就另起一行,再将各行拼成一个字符串 2.计算另起的 ...
- 微信小程序生成海报保存图片到相册小测试
test.wxml <canvas style="width:{{imageWidth}}px;height:{{imageHeight}}px;" canvas-id=&q ...
- 微信小程序登录方案
微信小程序登录方案 登录程序 app.js 调用wx.login获取code 将code作为参数请求自己业务登录接口获取session_key 存储session_key 如果有回调执行回调 App( ...
- 微信小程序生成太阳码
微信小程序生成太阳码 https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token 必须通过POST提交 而且参数 ...
- 小程序生成海报图片(或者原有的)并下载,&&相册授权&&按钮拉起二次授权
这是自己做小程序生成推广海报,并保存到本地相册的方法,向后台发起请求,返回一个海报图片,下载保存到相册, 如果只是单纯的下载图片代码43行-63行就足够了 如果想直接保存到相册,则不要做downFil ...
- 微信小程序生成二维码
微信小程序客户端生成二维码的方法, 请参考这里: https://github.com/demi520/wxapp-qrcode 代码片段如下: const QR = require(". ...
- 微信小程序生成带参二维码
需求:生成小程序中的海报,需要小程序二维码可以使用户保存到本地在朋友圈分享 生成二维码工具类代码如下: package com.aone.foottalk.action.wx.util; import ...
- 微信小程序推广方案
拥有小程序只是基础,能玩转小程序运营才是关键.本文将会简单讲述十种最实用的小程序推广策略,结合具体案例阐述商家企业如何在拥有小程序后玩转小程序,快速实现小程序的推广. 一. 公众号+小程序 小程序可以 ...
- 小程序生成海报 canvas
前言 微信小程序需要生成海报进行朋友圈分享,但是不同的手机会有问题, 然后首先是图片的问题 图片 在模拟器上没有报错,可是真机测试却什么也没画出来. canvas.drawImage 是不支持网络图片 ...
- 微信小程序生成带参数的二维码 小程序二维码
我是用php写的 先按照要求生成accesstoken $tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=clien ...
随机推荐
- (Python)用栈实现计算器的原理及实现
前言 我们日常使用的计算器是怎么实现计算的呢?能自己判断运算符的优先级去计算,能处理括号的匹配,这些都是怎么实现的呢? 一个大家熟知的答案是用栈,好的,那么为什么要用栈?为什么栈能实现呢? 目录 前言 ...
- JMeter 性能优化
Jmeter 性能优化:(3优化 + 1补充) 1.在 jmx 文件中 Disable 所有的结果输出,如: View Results Tree / Graph Results / Aggrega ...
- 搭建自己的OCR服务,第二步:PaddleOCR环境安装
PaddleOCR环境安装,遇到了很多问题,根据系统不同问题也不同,不要盲目看别人的教程,有的教程也过时了,根据实际情况自己调整. 我这边目前是使用windows 10系统+CPU + python ...
- VMware网络虚拟化介绍(之一)
2014年5月,在我加入VMware三个月之后,我涂鸦了一篇<扒一扒SDN的那些事儿>,当时放言如果阅读量过百就写续篇.后来果然阅读量没过百,也就80多的样子,其中好几份还是我自恋地进去查 ...
- MYSQL架构介绍
专栏持续更新中- 本专栏针对的是掌握MySQL基本操作后想要对其有深入了解并且有高性能追求的读者. 第一篇文章主要是对MySQL架构的主要概括,让读者脑海中有个对MySQL大体轮廓,很多地方没有展开细 ...
- C#连接小智服务器并将音频解码播放过程记录
前言 最近小智很火,本文记录C#连接小智服务器并将音频解码播放的过程,希望能帮助到对此感兴趣的开发者. 如果没有ESP-32也想体验小智AI,那么这两个项目很适合你. 1.https://github ...
- 为Avalonia应用添加图标
前言 为了让自己开发的应用更加好看,开发者往往需要增加一些图标. 本文分享在开发Avalonia应用时如何为应用增加图标,希望可以帮助到正在学习使用Avalonia并有此需求的开发者. 实践 经过搜索 ...
- nodejs参数的处理与用户的交互
解析脚本参数 作为脚本或者命令行工具,一般都需要支持不同的用户参数.默认参数被保存在process.argv的数组中,如下: [ nodeBinary, script, arg0, arg1, ... ...
- Text Bg ContentSizeFitter的另类控制
using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; [RequireComponent(typeof(Co ...
- chrony时间同步软件介绍
本文分享自天翼云开发者社区<chrony时间同步软件介绍>,作者:刘****苏 chrony是网络时间协议NTP的通用实现,它可以将系统时钟和`NTP服务器同步.它支持在各种条件下包括间歇 ...