自己做了一个小程序,主要用于给头像加图标的那种,和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

const base64 = require('../../utils/base64.js')
const upng = require('../../utils/UPNG.js')
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使用,及一些坑,以及自己的一些小总结的更多相关文章

  1. 原创:WeZRender:微信小程序Canvas增强组件

    WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...

  2. 记录一下小程序canvas

    小程序canvas学习 效果图: .wxml <canvas style="width: 100vw; height: 100vh;" canvas-id="fir ...

  3. 微信小程序-canvas绘制文字实现自动换行

    在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生一定的了问题.如果我们绘制的文本长度不确定或者 ...

  4. 微信小程序 canvas 字体自动换行(支持换行符)

    微信小程序 canvas 自动适配 自动换行,保存图片分享到朋友圈  https://github.com/richard1015/News 微信IDE演示代码https://developers.w ...

  5. 微信小程序--canvas画布实现图片的编辑

    技术:微信小程序   概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...

  6. 小程序canvas生成海报保存至手机相册

    小程序canvas画图保存至手机相册 (1)可直接展示生成的海报 .因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报 (2 ...

  7. 优化版小程序canvas,增加失败逻辑,及完善文字

    wxml <view class="shareBox" style="backgound:{{isShow ? '#000' : '#fff'}}" wx ...

  8. 总结微信小程序开发中遇到的坑

    总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...

  9. 小程序——微信小程序初学踩过的坑

    微信小程序初学踩过的坑 一.前言     最近因为某些需要和个人兴趣打算开发一下微信小程序,经过在官方网站上的基本了解,我大体知道了微信小程序开发的大致过程,其实最本质的就是MVVM,借用了很多模式上 ...

  10. 微信小程序 | canvas绘图

    1.新的尺寸单位 rpx rpx(responsive pixel): 可以根据屏幕宽度进行自适应. 规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则 ...

随机推荐

  1. Spring-webflow基础讲解

    什么是webflow: Spring Web Flow构建于Spring MVC之上,允许实现Web应用程序的“流程”.流程封装了一系列步骤,指导用户执行某些业务任务.它跨越多个HTTP请求,具有状态 ...

  2. 百度地图--JS版

    百度地图JS版本 ----选择关键字地图展示对应地址---- CSS body, html { width: %; height: %; margin: ; font-family: "微软 ...

  3. OpenLayers学习笔记(十)— 动态加载JSON数据模拟航迹线

    在openlayers 3 上,加载本地json数据,动态绘制航迹线,以飞机当前位置为地图中心,此例子是模拟DEMO 本文链接:动态加载JSON数据模拟航迹线 作者:狐狸家的鱼 GitHub:八至 前 ...

  4. C# http 性能优化500毫秒到 60 毫秒

    偶然发现 C# 的 HttpRequest 要比 Chrome 请求同一Url 慢好多.C# HttpRequest 要500毫秒 而Chrome 只需要 39ms. 作为有责任感的 码农.这个 必须 ...

  5. 《Linux下cp XXX1 XXX2的功能》的实现

    <Linux下cp XXX1 XXX2的功能>的实现 一.题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyC ...

  6. vue-微信支付or支付宝支付片段

      <ulclass="way_list"> <li v-if="!isWeixinBrowser" class="group al ...

  7. scws安装

    mkdir scws cd scws wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 tar xvjf scws-.tar.bz2 ...

  8. Maven 学习总结 (七) 之 灵活构建

    一个优秀的构建系统必须足够灵活,他应该能够让项目在不同的环境下都能成功地构建.Maven为支持项目的灵活性,内置了三大特性,即属性.Profile和资源过滤. Maven属性 通过<proper ...

  9. ioctl函数

    一.函数原型 #include <unistd.h> int ioctl(int fd, int request, .../* void *arg */); 二.和网络相关的请求(requ ...

  10. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versio

    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL ...