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个物理像素,则 ...
随机推荐
- Vue.js 2.x笔记:基本语法(2)
1. Vue实例及选项 1.1 创建Vue实例(new Vue instance) 每个Vue Application必须创建一个root Vue Instance. <script> v ...
- 台达PLC实现远程下载程序
台达PLC实现远程下载程序 日期:2019-04-27 时间 08:33:57 让物联变得更简单 18-09-2411:25 明明在公司调试没问题的设备一到 ...
- Lua中ipairs和pairs的区别详解
迭代器for遍历table时,ipairs和pairs的区别: 区别一:ipairs遇到nil会停止,pairs会输出nil值然后继续下去 区别二: , b = , x = , y = , " ...
- 关于TVWALL 通过AS300获取状态连接失败
昨天晚会突然之间频繁出现tvwall视频软件,断开AS300管理软件的故障 发现AS300当中的cms服务进程,占用内存250M左右,一般情况下估计就是50M左右,增长了不少 无奈之下,只有重启AS3 ...
- Python实现FTP文件的上传和下载
# coding: utf-8 import os from ftplib import FTP def ftp_connect(host, username, password): ftp = FT ...
- Djagno从入门到放弃
一.web应用.http协议.web框架 二.Django简介 三.路由控制 四.视图层 五.模版层 六.模型层:单表操作,多表操作,常用字段和参数,Django-model进阶 七.组件:Djang ...
- 一、docker的原理
一.docker解决什么问题: 高效的利用资源 应用之间相互隔离 应用之间不能发生资源抢占,每个应用只能使用事先注册申请的资源. 环境封装,利于迁移 二.docker的原理: 1.Namespaces ...
- 【持续跟新】剑指Offer_Java实现
[第一题 ]二维数组中的查找 package sword_finger_offer; import org.junit.jupiter.api.Test; /** * 剑指offer习题一 二维数组中 ...
- SQL两个事务update同一张表出现的死锁问题(waitfor delay)
抄录网址:https://blog.csdn.net/qiumuxia0921/article/details/50574879 下面是我们的建表语句: SET ANSI_NULLS ON GO SE ...
- ORM系列之Entity FrameWork详解
一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQ ...