2小程序canvas使用,及一些坑,以及自己的一些小总结
自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的, 第一回用,掉了很多坑,所以今天总结一下自己所做的,如果大家有不理解的地方,欢迎提问;如果帮到大家的话,帮忙点个啥的
canvas可以用来画一些东西,前台生成一些海报什么的,可以保存base64图片
canvas中介绍的各种方法有很多参数,不理解的话请自行到小程序开发文档查看
我合成的方法是,第一步:获取系统信息,第二步:画背景,第三步:在这个背景上画另外一张图片,进行合成,然后转base64图片,传给后台
##你在画布,想把一张图片画上去,只要是网络图片,就一定要download file下来,使用临时路径,因为我就踩了这个大坑,直接使用网络图片,会有真机不显示的问题
##因为你头像也需要使用缓存路径,所有你需要把https://wx.qlogo.cn添加到你的downloadfile的域名下,这样就省事了很多,如果你想要测试,就把详情里的不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书,对勾去掉测试,为了实现效果不择手段
第一步:获取系统信息:
1://获取系统信息。手机型号,设备像素比,屏幕宽高,可使用窗口宽高,微信app的信息
getSystemInfo: function () {
var t = this;
wx.getSystemInfo({
success: function (a) {
//screenWidth,screenHeight屏幕宽高
var i = a.screenWidth / 375;
t.setData({
screenWidth: i,
canvasWidth: a.screenWidth / 375 * 250,
canvasHeight: a.screenWidth / 375 * 250
}), e.globalData.platform = a.platform;
}
})
},
第二步:绘制背景
//需要获取canvas,和h5一样
const ctx = wx.createCanvasContext('myCanvas')
draw: function (path) {
console.log(path)
var that = this
//背景图片路径
var path = path
//画布宽度 //画布高度
var canvasWidth = that.data.canvasWidth
var canvasHeight = that.data.canvasHeight
//getImageInfo()获取图片信息,倘若为网络图片,需先配置download域名才能生效。
wx.getImageInfo({
src: path,
success: function (res) {
//drawImage()绘制图像到画布。
//res.path所要绘制的图片资源
//0,0,是你要在画布的哪个位置开始画
//canvasWidth, canvasHeight你需要在画布上绘制多大的背景图,允许缩放
ctx.drawImage(res.path, 0, 0, canvasWidth, canvasHeight)
//画完第一层背景之后,调用合成图标的方法
that.headicon()
},
fail: function (res) {
console.log(res);
}
})
},
第三步:画好背景,合成图标,图片做好后,我利用canvasGetImageData()方法,把画布内容保存成base64的图片,如果有想用此方法的需要三个文件,我把它放在网盘,大家可以下载
链接:https://pan.baidu.com/s/1bHXpAGDdPkmQpgLt49wUGQ 密码:6riy
headicon: function () {
var that = this
//图标路径
var qrcodeUrl = this.data.qrcodeUrl;
//画布宽度 //画布高度
var canvasWidth = this.data.canvasWidth
var canvasHeight = this.data.canvasHeight
// 你需要把图标绘制到哪个位置(起点位置)
var x = canvasWidth - 80
var y = canvasHeight - 80
wx.getImageInfo({
src: qrcodeUrl,
success: function (res) {
ctx.drawImage(qrcodeUrl, x, y, 80, 80)
//保存当前画的状态
ctx.save();
//恢复当前画的状态
ctx.restore();
ctx.draw(false, () => {
// 2. 获取图像数据。canvasGetImageData()在ctx.draw()里使用在有效
wx.canvasGetImageData({
// 你需要获取那张画布的数据,获取多大范围的数据
canvasId: "myCanvas",
x: 0,
y: 0,
width: canvasWidth,
height: canvasHeight,
success:res=> {
// 3. png编码
let pngData = upng.encode([res.data.buffer], res.width, res.height)
// 4. base64编码,转成base64图片,就可以发送给后台保存了
let base64 = wx.arrayBufferToBase64(pngData)
that.setData({
generatePictures: base64
})
}
})
})
},
fail: function (res) {
console.log(res);
}
})
},
2小程序canvas使用,及一些坑,以及自己的一些小总结的更多相关文章
- 原创:WeZRender:微信小程序Canvas增强组件
WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...
- 记录一下小程序canvas
小程序canvas学习 效果图: .wxml <canvas style="width: 100vw; height: 100vh;" canvas-id="fir ...
- 微信小程序-canvas绘制文字实现自动换行
在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生一定的了问题.如果我们绘制的文本长度不确定或者 ...
- 微信小程序 canvas 字体自动换行(支持换行符)
微信小程序 canvas 自动适配 自动换行,保存图片分享到朋友圈 https://github.com/richard1015/News 微信IDE演示代码https://developers.w ...
- 微信小程序--canvas画布实现图片的编辑
技术:微信小程序 概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...
- 小程序canvas生成海报保存至手机相册
小程序canvas画图保存至手机相册 (1)可直接展示生成的海报 .因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报 (2 ...
- 优化版小程序canvas,增加失败逻辑,及完善文字
wxml <view class="shareBox" style="backgound:{{isShow ? '#000' : '#fff'}}" wx ...
- 总结微信小程序开发中遇到的坑
总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...
- 小程序——微信小程序初学踩过的坑
微信小程序初学踩过的坑 一.前言 最近因为某些需要和个人兴趣打算开发一下微信小程序,经过在官方网站上的基本了解,我大体知道了微信小程序开发的大致过程,其实最本质的就是MVVM,借用了很多模式上 ...
- 微信小程序 | canvas绘图
1.新的尺寸单位 rpx rpx(responsive pixel): 可以根据屏幕宽度进行自适应. 规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则 ...
随机推荐
- Python进阶6---序列化与反序列化
序列化与反序列化*** 为什么要序列化 ? 定义 pickle库 #序列化实例 import pickle lst = 'a b c'.split() with open('test.txt','wb ...
- window.open() & iframe & tab
window.open() & iframe & tab window.open() open pages in the same window / tab https://stack ...
- mysql-笔记 隔离级别、事务
1 隔离级别:低级别的隔离通常可以执行更高的并发,系统 开销也更低 2 Read uncommitted:事务可以读取未提交的数据,脏读,应少用 3 read committed:不可重复读,事务只能 ...
- 解决Windows10中Virtualbox安装虚拟机没有64位选项
今天想在Windows 10系统安装完Virtualbox虚拟机,然后打算装一个CENTOS系统,但是选择安装系统的时候竟然没有64位操作系统的选项,经过一阵Google,终于解决了,在这里盘点一下出 ...
- springboot 配置mybatis
- C语言博客作业04--数组
1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 关于数组,数组是最基本的构造类型,它是一组相同类型数据的有序组合.数组中的元素在内存中连续存放,每个元素 ...
- Python 学习笔记 - 不断更新!
Python 学习笔记 太久不写python,已经忘记以前学习的时候遇到了那些坑坑洼洼的地方了,开个帖子来记录一下,以供日后查阅. 摘要:一些报错:为啥Python没有自增 ++ 和自减 --: 0x ...
- Dlib Opencv cv2.fitEllipse用于人眼轮廓椭圆拟合
dlib库的安装以及人脸特征点的识别分布分别在前两篇博文里面 Dlib Python 检测人脸特征点 Face Landmark Detection Mac OSX下安装dlib (Python) 这 ...
- Mac OSX下安装dlib (Python)
1.在安装Dlib库之前需要安装的库:opencv,numpy 2.安装Xquartz2.7.11 Xquartz是执行Unix程序的图形窗口环境,为了兼容Unix和Linux下移植过来的程序就需要安 ...
- v-for 循环element-ui菜单
vue 使用了element-ui的菜单组件, 这个组件的el-menu-item项上,有一个属性index,值是字符串类型, 在使用v-for的index时,它是一个数值型,所以如果直接写index ...