微信小程序生成指定页面小程序码海报图片分享思路总结
本博客主要说下思路,具体代码不贴
1、考虑到组件复用,所以我把它做成一个自定义的组件
<my-poster
id="getPoster"
avater="{{imageUrl}}"
knowledges="{{klPoster}}"
scene="{{topicId}}">
</my-poster>
可以传图片avater、文字内容knowledges、页面参数scene
2、组件里面首先是得需要一个画布。
画布外可以正常写元素标签,定义样式
<view class="mask_screen" wx:if="{{showpost}}">
<view class='poster_box'>
<view class='poster_content' id='canvas-container'>
<canvas canvas-id="myCanvas" style="width:100%;height:{{canvasHeight}}px;" />
</view>
<view class='tips'>保存图片,分享给小伙伴吧</view>
<view class='save' bindtap='saveShareImg'>
<image class='down' mode='widthFix' src='../../assets/dbs/down.png'></image>
<text>保存</text>
</view>
<image class='close' bindtap='closePoste' mode='widthFix' src='../../assets/dbs/close.png'></image>
</view>
</view>
3、画布准备好之后,就是需要准备画图的一些资源,比如图片之类的
网络图片需利用微信接口 wx.downloadFile 下载下来之后,获取图片的临时地址,根据该临时地址才可以画图;
如果是工程类图片,只需要写好路径,即可以画图。比如:
// 网络图片
if (topicImage) {
wx.downloadFile({
url: topicImage,
success: function(res) {
wx.hideLoading();
if (res.statusCode === ) {
var productSrc = res.tempFilePath;
that.calculateImg(productSrc, function(data) {
that.getCode(productSrc, data)
})
}
}
})
} // 工程内图片
let dbicon = '../../assets/dbs/' + item.type + '.png';
ctx.drawImage(dbicon, , offsetHeight + , , )
4、有些图片可能要计算宽高的,需要利用微信接口 wx.getImageInfo 获取图片宽高等信息,wx.getSystemInfo 获取手机屏幕宽高等信息,根据比例去计算绘制
//计算图片尺寸
calculateImg: function(src, cb) {
var that = this;
wx.getImageInfo({
src: src,
success(res) {
wx.getSystemInfo({
success(res2) {
var ratio = res.width / res.height;
var imgHeight = res2.windowWidth * 0.6 / ratio;
// var screeRratio = res2.screenWidth / res2.screenHeight
that.setData({
canvasHeight: imgHeight +
// canvasHeight: res2.windowWidth * 0.5 / screeRratio
})
cb(imgHeight);
}
})
}
})
}
5、再就是获取页面的小程序码,微信文档有介绍:三种接口获取方式
获取小程序码:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html
6、绘制文字换行问题,上一篇有介绍
7、图片生成之后,保存图片。主要利用微信接口 wx.canvasToTempFilePath 和 wx.saveImageToPhotosAlbum
//点击保存到相册
saveShareImg: function() {
var that = this;
wx.showLoading({
title: '正在保存',
mask: true,
})
setTimeout(function() {
wx.canvasToTempFilePath({
canvasId: 'myCanvas',
success: function(res) {
wx.hideLoading();
var tempFilePath = res.tempFilePath;
wx.saveImageToPhotosAlbum({
filePath: tempFilePath,
success(res) {
wx.showModal({
content: '图片已保存到相册,赶紧晒一下吧~',
showCancel: false,
confirmText: '好的',
confirmColor: '#333',
success: function(res) {
that.closePoste();
if (res.confirm) {}
},
fail: function(res) {
console.log(res)
}
})
},
fail: function(res) {
wx.showToast({
title: res.errMsg,
icon: 'none',
duration:
})
}
})
},
fail: function(err) {
console.log(err)
}
}, that);
}, );
},
8、注意事项:
(1)图片要提前下载:这里面有一个问题就是,图片要提前下载完之后再绘图,不然图片显示不出来,可以把下载图片的方法单独拎出来,然后下载图片后回调绘图方法。
(2)ctx.draw(),这个方法是在绘制完成之后在调用,不然容易其它被覆盖。
大致思路就是如此。
微信小程序生成指定页面小程序码海报图片分享思路总结的更多相关文章
- 微信小程序生成带参二维码
需求:生成小程序中的海报,需要小程序二维码可以使用户保存到本地在朋友圈分享 生成二维码工具类代码如下: package com.aone.foottalk.action.wx.util; import ...
- [微信跳转链接]之WAP跳转微信内指定页面
由于微信覆盖太全面了,几乎所有人都使用微信APP,但是对于做产品的公司来说,所有的产品几乎都离不开微信的推广,然而微信属于封闭式的一个社交应用,大部分只能在今日头条,百度,等等...如果你在推广页面上 ...
- [BUG]微信小程序生成小程序码"小程序页面路径不存在,请重新输入"
描述 小程序页面线上能打开. 微信官方 获取小程序页面小程序码 页面 ,输入 小程序页面路径,提示 "小程序页面路径不存在,请重新输入". 使用微信复制小程序路径方法, 也是同样的 ...
- 微信小程序生成小程序某一个页面的小程序码
1 登录微信小程序后台,mp.weixin.qq.com 2 点击右上角工具->生成小程序码 3 填写小程序名称或appid 4 关键一步,下面页面填写用户微信号后,打开小程序到某一个页面,点击 ...
- 微信小程序获取Access_token和页面URL生成小程序码或二维码
1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...
- 微信小程序生成带参数的二维码(小程序码)独家asp.net的服务端c#完整代码
一)我先用的小程序端的wx.request去调用API,发现竟然是一个坑! wx.request({ url: 'https://api.weixin.qq.com/wxa/getwxacodeunl ...
- 关于.NET HttpClient方式获取微信小程序码(二维码)
随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来.近来分析了一项生成有关生成微信小程序码的需求——要求扫码跳转到小程序指定页面(带参数):看了下小程序官方文档文档,结合网上的例子,未看到 ...
- 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...
- 微信小程序生成太阳码
微信小程序生成太阳码 https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token 必须通过POST提交 而且参数 ...
随机推荐
- 013 mysql中find_in_set()函数的使用
在工作中遇见过,对于新知识,在这里写一写文档. 1.作用 举个例子,也许不理解,在看完后面的SQL示例,再来看就明白了: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点 ...
- quratz启动流程
SchedulerFactory在创建quartzScheduler的过程中,将会读取配置参数,初始化各个组件. 1.启动流程图 2.ThreadPool 一般是使用SimpleThreadPool, ...
- 2018-03-11 20165235祁瑛《Java程序设计》第二周学习总结
2018-03-11 20165235祁瑛<Java程序设计>第二周学习总结 教材学习内容总结 第二章要点: 在这一章中我学到了很多东西: (1)布尔类型boolean,布尔类型的赋值只能 ...
- kafka告警简单方案
一.前言 为什么要设计kafka告警方案?现成的监控项目百度一下一大堆,KafkaOffsetMonitor.KafkaManager. Burrow等,具体参考:kafka的消息挤压监控.由于本小组 ...
- XamarinEssentials教程获取首选项的值
XamarinEssentials教程获取首选项的值 如果开发者想要获取首选项中某一项的值时,可以使用Preferences类的Get()方法实现,该方法可以对指定键的值进行获取.该方法有12种形式, ...
- 爆炸销毁动画组件Explosions
爆炸销毁动画组件Explosions 爆炸销毁动画通常应用于界面元素的移除.使用该动画效果可以将移除操作表现的更为直观生动.Explosions组件是一款专门实现爆炸销动画效果的组件,它可以展示界 ...
- Linux服务部署--Java(二)
八.Maven安装配置 1. 下载 wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3. ...
- luffy项目的接口开发
处理跨域请求 主要的思路: 设置一个基于CORS的中间件来处理,关于跨域的产生与处理手段 settings.py: MIDDLEWARE = [ 'django.middleware.security ...
- 封装、property特性及绑定与非绑定方法
1.封装 (1)什么是封装? 封:属性对外是隐藏的,但对内是开放的: 装:申请一个名称空间,往里面装入一系列名字/属性 (2)为什么要封装? 封装数据属性的目的 首先定义属性的目的就是为了给类外部的使 ...
- 【学习笔记】python2的print和python3的print()
python2.x和3.x中的输出语句有着明显不同 2.x中的print不是个函数,输出格式如下 Python 2.7.12+ (default, Aug 4 2016, 20:04:34) [GCC ...