当前位置:网站首页 > 持续集成与持续测试 > 正文

微信小程序canvas开发的一些坑和总结-持续更新

一,新版的canvas和旧版不同,需要增加type=2d,且初始化不一样

第一步是html中修改

<canvas canvas-id="myCanvas" /> <!-- 修改为以下 --> <canvas id="myCanvas" type="2d" /> 

第二步是初始化变了

const context = wx.createCanvasContext('myCanvas') // // 修改为以下 // wx.createSelectorQuery() .select('#myCanvas') // 在 WXML 中填入的 id .node(({ 
    node: canvas }) => { 
    const context = canvas.getContext('2d') }) .exec() 

二,在popup弹窗中使用canvas绘制无效

当canvas重新渲染时,canvas中的内容全部都会被清空。 解决 popup弹出后,不要马上绘制,需要等待popup中的canvas渲染完成后,在调用canvas取绘制就好了!
这是因为新版的canvas绘制是同步的,而canvas的初始化又是异步的,这就导致popup弹窗我们用v-if来创建时,就会发生这个问题.
我的修改:

showCanvas(){ 
    this.imgShow=true const that=this that.$nextTick(()=>{ 
    // 使用 fabric 绑定画布 wx.createSelectorQuery() .select('#poster-canvas') // 在 WXML 中填入的 id .fields({ 
    node: true, size: true }) .exec((res) => { 
    // Canvas 对象 const canvasNode = res[0].node // 渲染上下文 that.context = canvasNode.getContext('2d') const dpr = wx.getSystemInfoSync().pixelRatio canvasNode.width = res[0].width * dpr canvasNode.height = res[0].height * dpr that.context.scale(dpr, dpr) that.context.clearRect(0, 0, that.context.canvas.width, that.context.canvas.height) const image = canvasNode.createImage() image.src = 'https://open.weixin..com/zh_CN/htmledition/res/assets/res-design-download/icon64_wx_logo.png' image.onload = () => { 
    console.log("图片加载完成",that.context) that.context.drawImage( image, 0, 0, 150, 100, ) that.context.fillStyle="red" that.context.strokeStyle="blue" that.context.beginPath() that.context.moveTo(10,10) that.context.lineTo(60, 10) that.context.lineTo(60, 40) that.context.closePath() that.context.stroke() that.context.fill() // 这里绘制完成 console.log('draw done') } }) }) }, 

也就是放置在nextTick中,等canvas初始化完成后再绘制即可.

三,canvas生成图片并保存到手机系统相册

// 当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径 canvasToTempFilePath(canvas, params) { 
    return new Promise((resolve, reject) => { 
    uni.canvasToTempFilePath( { 
    canvas:canvas, fileType: 'jpg', quality:1, ...params, success: resolve, fail: reject } ) }) }, //下载保存canvas的内容为图片到本地 async saveCanvasToLocal(canvasId){ 
    const { 
    tempFilePath } = await this.canvasToTempFilePath(canvasId, { 
   })//转成图片 uni.saveImageToPhotosAlbum({ 
    filePath: tempFilePath, success: function (data) { 
    wx.hideLoading() wx.showModal({ 
    title: '提示', content: '您的图片已保存到相册', showCancel: false, }) }, fail: function (err) { 
    if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") { 
    // 这边微信做过调整,必须要在按钮中触发,因此需要在弹框回调中进行调用 wx.showModal({ 
    title: '提示', content: '需要您授权保存相册', showCancel: false, success: modalSuccess => { 
    wx.openSetting({ 
    success(settingdata) { 
    console.log("settingdata", settingdata) if (settingdata.authSetting['scope.writePhotosAlbum']) { 
    wx.showModal({ 
    title: '提示', content: '获取权限成功,再次点击图片即可保存', showCancel: false, }) } else { 
    wx.showModal({ 
    title: '提示', content: '获取权限失败,将无法保存到相册', showCancel: false, }) } }, fail(failData) { 
    console.log("failData", failData) }, complete(finishData) { 
    console.log("finishData", finishData) } }) } }) } }, complete(res) { 
    wx.hideLoading() } }); }, 
到此这篇微信小程序canvas开发的一些坑和总结-持续更新的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

  • 上一篇: jenkin配置gitlab持续化构建Spring Cloud微服务
  • 下一篇: 没有了
  • 版权声明


    相关文章:

  • jenkin配置gitlab持续化构建Spring Cloud微服务2024-12-03 14:45:09
  • 接口测试之Postman使用全图文指南_接口测试属于什么测试2024-12-03 14:45:09
  • 《持续交付》(二)持续集成与测试_持续交付和持续集成2024-12-03 14:45:09
  • 〖Python WEB 自动化测试实战篇⑮〗 实战 - 自动化测试的持续集成2024-12-03 14:45:09
  • 自动化测试、持续集成与持续部署_自动化测试,持续集成与持续部署的区别2024-12-03 14:45:09
  • 〖Python接口自动化测试实战篇④〗- 接口自动化测试详解2024-12-03 14:45:09
  • 单元测试的持续集成: 如何实现高效的持续集成2024-12-03 14:45:09
  • 自动化测试、持续集成与持续部署!_自动化测试,持续集成与持续部署的区别2024-12-03 14:45:09
  • jenkins+docker集成harbor实现可持续集成2024-12-03 14:45:09
  • 基于jenkins持续集成测试的意义_jenkins持续集成自动化测试2024-12-03 14:45:09
  • 全屏图片