前言

这几天接到一个需求,要在公众号内生成分享海报。之前有做过H5和小程序的,心想直接复制过来就行了。没想到踩了不少的坑,搞了好几天终于搞好了,特此分享一下,希望能对大家有所帮助。

效果图

代码实现

    <u-mask :show="showPoster" @click="showPoster = false" :custom-style="{background: 'rgba(0, 0, 0, 0.8)'}">
<view class="poster-canvas">
<canvas canvas-id="canvasId"
:style="{width: (poster.width||10) + 'px', height: (poster.height||10) + 'px'}"></canvas>
</view>
<view class="poster-img-box">
<image class="poster-img" :src="posterUrl" show-menu-by-longpress></image>
</view>
<view class="poster-footer">
长按图片保存
</view>
</u-mask>
import {
getSharePoster
} from '@/components/QuShe-SharerPoster/QS-SharePoster/QS-SharePoster.js';
data() {
return {
showPoster: false,
posterUrl: "",
posterCodeUrl: "",
avatarUrl: "",
bgUrl: "",
poster: {},
}
},
async createPoster() {
let _this = this; const d = await getSharePoster({ //return Promise
_this: _this, //若在组件中使用 必传
posterCanvasId: 'canvasId', //canvasId
canvasType: '2d',
type: 'testShareType',
backgroundImage: `data:image/png;base64,${this.info.background_url2}`, //背景图片路径, 画布会跟随图片的实际像素, 并绘制为背景, 请不要使背景图片的像素太大
setCanvasWH({
bgObj
}) {
bgObj.width = 245
bgObj.height = 435
_this.poster = bgObj
},
drawArray({ //绘制序列
bgObj, //背景图对象
type, //自定义标识
bgScale, //背景缩放
setBgObj, //动态设置画布(宽高),若使用该方法不建议背景图方式绘制, 建议使用background自定义画布绘制, 因为这个方法绘制修改背景图的宽高
getBgObj //获取动态设置的画布宽高
}) {
//return new Promise((rs, rj)=>{ rs([Obejct, ...]) })
//或者
//return [Obejct, ...]
const elementArray = [{
type: 'image',
id: 'code',
url: `data:image/png;base64,${_this.posterCodeUrl}`,
dx: 170,
dy: 350,
dWidth: 60,
dHeight: 60,
serialNum: 0,
}]
if (_this.info.background_if_avatar) {
elementArray.push({
type: 'image',
id: 'avatar',
url: `data:image/png;base64,${_this.info.image2}`,
dx: 20,
dy: 355,
dWidth: 32,
dHeight: 32,
serialNum: 0,
circleSet: {
r: 16
}
}, )
}
if (_this.info.background_if_nickname) {
elementArray.push({
type: 'text',
id: 'nickname',
text: _this.nickName,
color: '#fff',
dx: 20,
dy: 400,
serialNum: 1,
})
}
return elementArray
},
})
uni.hideLoading()
this.showPoster = true
this.posterUrl = d.poster.tempFilePath
},

以上是具体实现的主要代码,这里选用了QS-SharePoster插件,开始时我是想用uniapp的原生canvas-API进行开发的,可是总是有各种各样的问题,搞了一天不得已只能放弃。

请注意在公众号内图片一定要用base64格式的!在使用uniapp并且公众号内生成海报是需要使用到图片下载API的,这个API总是会莫名其妙的失败,找不到任何的原因。小程序端以及H5都是完全正常的。尝试了好几天无果后,突然想到是不是可以采用base64格式的图片是不是没有限制呢?毕竟base64相当于直接就是数据了,试了一下果然可以,问题也解决了。

微信公众号生成海报(uniapp)的更多相关文章

  1. C# 实现生成带二维码的专属微信公众号推广海报

    原文:C# 实现生成带二维码的专属微信公众号推广海报 很多微信公众号中需要生成推广海报的功能,粉丝获得专属海报后可以分享到朋友圈或发给朋友,为公众号代言邀请好友即可获取奖励的.海报自带渠道二维码,粉丝 ...

  2. 微信公众号生成带参数的二维码asp源码下载

    晚上闲着没事,一个朋友联系,让帮忙写一个微信公众号利用asp生成带参数的二维码,别人扫了后如果已经关注过该公众号的,则直接进入公众号里,如果没关注则提示关注,关注后自动把该微信用户资料获取到并且保存入 ...

  3. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  4. 微信公众号开发C#系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  5. uni-app开发经验分享十七: 开发微信公众号(H5)JSSDK 的使用方式

    因为这个jssdk被uni-app坑了好多天,作者说支持1.4版本,但是我用1.4的两个分享的新方法一直不支持. 最后只能放弃了,期待什么时候能更新上. 基本的使用方法:第一步 - 下载使用方式下载地 ...

  6. 微信公众号第三方平台生成自定义菜单提示 获取"access_token失败"

    在微信公众号第三方平台要生成自定义菜单时,程序反应很慢,最终提示"获取access_token失败"(之前程序无改动,使用时间已久),查了大半天,找不出原因. 排除.在微信公众号平 ...

  7. uniapp - 微信公众号授权登录

    [缘由] 采用uniapp进行微信小程序和微信公众号双版本开发:考虑到用户唯一性,我们后端确定了以“unionid”.作为唯一标识. 有的小伙伴估计也是刚入这坑,我就简单说一下步骤流程   [摸索] ...

  8. 微信公众号开发(一)--验证服务器地址的Java实现

    现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...

  9. NodeJs 开发微信公众号(四)微信网页授权

    微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理.个人等信息的权限.对于开发了自己的网页app应用时,获取个人的信息非常重要.上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需 ...

随机推荐

  1. Python标准库模块之heapq – 堆构造

    Python标准库模块之heapq – 堆构造 读前福利:几百本经典书籍https://www.johngo689.com/2158/ 原文链接:https://www.johngo689.com/2 ...

  2. tomcat启动程序报错

    1.问题 23-Apr-2021 10:53:38.897 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.de ...

  3. Miller Rabin 详解 && 小清新数学题题解

    在做这道题之前,我们首先来尝试签到题. 签到题 我们定义一个函数:\(qiandao(x)\) 为小于等于 x 的数中与 x 不互质的数的个数.要求 \(\sum\limits _{i=l}^r qi ...

  4. clock时钟

    ①时钟的偏移(skew):时钟分支信号在到达寄存器的时钟端口过程中,都存在有线网等延时,由于延时,到达寄存器时钟端口的时钟信号存在有相位差,也就是不能保证每一个沿都对齐,这种差异称为时钟偏移(cloc ...

  5. ZooKeeper分布式配置——看这篇就够了

    ZooKeeper 的由来 PS:这一节不重要, 不感兴趣的小伙伴可以跳过 ZooKeeper 最早起源于雅虎研究院的一个研究小组,在当时,研究人员发现,在雅虎内部有很多的大型系统基本上都需要依赖一个 ...

  6. 初学Python “登录”案例 更新!!

    更新内容:添加了登录次数,如果超过限制的次数,则提示账户被锁定,去某邮箱申请解锁账户! 此次仅把登录系统更新之后源代码放到这里,不在共享源文件在网盘了! 1 ''' 2 登录界面 3 ''' 4 5 ...

  7. 计算机网络传输层之TCP流量控制

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105531547 学习课程:<2019王道考研计算机网络> 学习目的 ...

  8. Verilog设计技巧实例及实现

    Verilog设计技巧实例及实现 1 引言 最近在刷HDLBits的过程中学习了一些Verilog的设计技巧,在这里予以整理.部分操作可能降低代码的可读性和Debug的难度,请大家根据实际情况进行使用 ...

  9. 字符串折叠&压缩(区间DP)

    字符串折叠 题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS-S(X个S). 如果A = A ...

  10. hdu 2473 Junk-Mail Filter(并查集)

    题意: N个邮件需要鉴别. 两种操作: 1. M X Y:X和Y是同一种邮件 2.S X:X被误判(意味着X要被它从属的那个集合"踢出去"而所有其它的邮件的关系保持不变) 问最后总 ...