微信小程序之canvas画图生成图片下载

要实现的功能:

点击朋友圈按钮弹出分享图片:

点击保存分享图片保存到手机
实现代码:
1.分享按钮点击事件

/**
   * 分享
   */
  weixinShare:function(){
    var that = this;
    console.log(111);
    share.canvasImg((res)=>{
      console.log(222);
      that.setData({
        imagePath: res.tempFilePath,
        bgShare:false,
        left:43
      });
    });
  }

2.生成图片

/**
   * 绘制分享图片
   */
  canvasImg(callback){
    //小程序二维码
    let promise1 = new Promise(function (resolve, reject) {
      /* 获得要在画布上绘制的图片 */
      wx.getImageInfo({
        src: ‘/images/qrcode.png‘,
        success: function (res) {
          console.log(res)
          resolve(res);
        }
      })
    });
    //背景图像
    let promise2 = new Promise(function (resolve, reject) {
      wx.getImageInfo({
        src: ‘/images/bg1.png‘,
        success: function (res) {
          console.log(res)
          resolve(res);
        }
      })
    });
    //用户头像
    let promise3 = new Promise(function (resolve, reject) {
      wx.getImageInfo({
        src: ‘/images/logo.png‘,
        success: function (res) {
          console.log(res)
          resolve(res);
        }
      })
    });
    Promise.all(
      [promise1, promise2, promise3]
    ).then(res => {
      const ctx = wx.createCanvasContext(‘shareWeixin‘)
      ctx.setFillStyle(‘#FFFFFF‘);
      ctx.fillRect(0,0,500,600);
      ctx.drawImage(‘../../../‘ + res[0].path, 220, 321, 100, 100)
      ctx.drawImage(‘../../../‘ + res[1].path, 0, 0, 331, 252)
      ctx.drawImage(‘../../../‘ + res[2].path, 10, 275, 30, 30)
        // 绘制文字 位置自己计算 参数自己看文档
      // ctx.setTextAlign(‘left‘)  //  位置

      ctx.setFillStyle(‘#000000‘)   //  颜色
      ctx.setFontSize(15);
      ctx.fillText(‘海贼王‘,54,300);
      ctx.setFontSize(22)           //  字号
      ctx.fillText(‘生活小记者‘, 10, 341)//  内容  不会自己换行 需手动换行
      ctx.fillText(‘快来关注校园时讯‘, 10, 377) //  内容
      ctx.setFillStyle(‘#ccc‘)
      ctx.setFontSize(15)
      ctx.fillText(‘长按识别扫码查看详情‘,10,410);
      /* 绘制 */
      ctx.stroke()
      ctx.draw(true,setTimeout(function(){
        wx.canvasToTempFilePath({
          x: 0,
          y: 0,
          width: 600,
          height: 800,
          destWidth: 600,
          destHeight: 800,
          canvasId: ‘shareWeixin‘,
          success: function (res) {
            // wx.saveImageToPhotosAlbum({
            //   filePath: res.tempFilePath,
            // })
            callback && callback(res)
          },
          fail: function (res) {
            console.log(res)
          }
        })
      },500))
    })
  }

3.保存到手机

// 保存到手机图片
  saveToPhone:function(){
    var that = this;
    // console.log(that.data.imagePath);
    // 保存到本地
    wx.downloadFile({
      url: that.data.imagePath,
      success: function (res) {
        tempFilePaths = res.tempFilePath
        wx.saveFile({
          tempFilePath: tempFilePaths,
          success(res) {
            savedFilePath = res.savedFilePath
            // console.log(‘保存路径‘);
            // console.log(savedFilePath)
            // 保存到手机
            wx.saveImageToPhotosAlbum({
              filePath: savedFilePath,
              success(res) {
                console.log(res)
                wx.showToast({
                  title: ‘成功‘,
                  icon: ‘success‘,
                  duration: 2000
                })
              },
              fail(res) {
                console.log(‘保存到手机失败‘);
                console.log(res)
              }
            })
          }
        })
      }, fail: function (res) {
        console.log(‘保存到本地失败‘);
        console.log(res)
      }
    })
  }

5.前端代码

<!-- 分享图片 -->
<view class=‘bg-shade‘ hidden="{{bgShare}}"></view>
<canvas style="width: 600rpx; height: 800rpx;left:{{left}}px;" canvas-id="shareWeixin" class=‘share-bg‘></canvas>
<view hidden=‘{{bgShare}}‘ class=‘preview‘>
  <image src=‘{{imagePath}}‘ class=‘shareImg‘></image>
  <button type=‘primary‘ size=‘default‘ bindtap=‘saveToPhone‘>保存分享图</button>
</view> 

总结:

  • 画图的时候要延迟一定事件否则会生成失败,生成一张同样大小的空白图片
  • 下载图片的时候不要直接用临时的图片链接,可以先下载本地获得链接再保存
  • 使用canvas绘图的时候不能隐藏canvas,否则会报错,所以可以设置左右上下距离让他定位到屏幕外

原文地址:http://blog.51cto.com/11016194/2318329

时间: 2024-10-10 00:08:07

微信小程序之canvas画图生成图片下载的相关文章

微信小程序最新版本已更新下载(1.02.1805160)

微信小程序最新版本已更新下载(1.02.1805160) windows 64 . windows 32 . mac 2018.05.16 基础库更新(2.0.8) 1.仅针对开发工具,更新小程序/小游戏转发相关接口,移除转发回调 2018.05.15 基础库更新(2.0.7) A 新增 素材管理功能 详情 A 新增 工具栏右键进行工具栏管理 详情 A 新增 独立窗口显示模拟器和调试器的功能 详情 A 新增 可以在工具栏切换小程序模式和插件模式 A 新增 小程序使用的插件有更新时,在控制台提示插

微信小程序最新版本已更新下载 (1.02.1806080)

下载地址如下: windows 64 . windows 32 . mac 2018.06.08 更新日志 A 新增 自动预览功能 A 新增 远程调试 Network 面板 A 新增 模拟器静音功能 A 新增 代码断点检测及提示 A 新增 支持插件页面 A 新增 上传插件时推荐版本号 A 新增 Storage 面板清除按钮及数据详情展示 A 新增 项目详情 appid 复制按钮 F 修复 Win10 1803 版本出现自动编译的问题 win10 更新到1803后 频繁自动重新编译,上一个开发工具

微信小程序源码下载(200多个)

微信小程序源码下载汇总,点击标题进入对应的微信小程序下载页面. 最新 demo源码(点击标题进入帖子下载) 描述 1 微信小程序 会议室预定小程序 微信小程序 会议室预定小程序**** 本内容被作者隐藏 **** 2 微信小程序-双人五子棋小游戏 微信小程序-双人五子棋小游戏**** 本内容被作者隐藏 **** 3 打卡签到小程序 用微信小程序实现的一个简单的打卡签到的小程序拒绝 4 微信小程序---左滑删除 微信小程序---左滑删除**** 本内容被作者隐藏 **** 5 一个借钱的记事本的微

微信小程序 canvas 绘图问题总结

业务中碰到微信小程序需要生成海报进行朋友圈分享,这个是非常常见的功能,没想到实际操作的时候花了整整一天一夜才搞好,微信的 canvas 绘图实在是太难用了,官方快点优化一下吧. 业务非常简单,只需要将用到的图片,文案素材拼装到一张图片,保存到本地就可以了. 首先创建画布,将一张网上的图片画到画布上. const ctx = wx.createCanvasContext('shareCanvas'); ctx.drawImage("https://img3.doubanio.com/view/ph

微信 小程序 canvas

测试手机为IPHONE6,开发者工具版本0.10.102800 微信小程序里的canvas 非 h5 canvas有很多不一样的地方,以下把微信小程序的canvas叫做wxcanvas 下面全是我一点点测试出的干货,耐心看: 1.wxcanvas,不像h5canvas那样有width和height属性和width和height的style样式.他只有style样式,可以理解为他就是个框吧: 2.wxcanvas不要当成真的H5canvas,就当它是个div就行,画出范围的东西也是存在的,改变wi

微信小程序实例源码大全demo下载

怎么本地测试微信小程序实例源码 1.下载源码 2.打开微信开发者工具 3.添加项目->选择本项目目录->编译执行 微信小程序实例源码大全 微信小程序游戏类demo:识色:从相似颜色中挑选不同的一个 源码链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1105 微信小程序精品demo:仿网易云音乐:歌单,FM,播放,评论 源码链接:http://www.wxapp-union.com/forum.php?mod=vie

官方问答--微信小程序常见FAQ (17.8.21-17.8.27)

给提问的开发者的建议:提问之前先查询 文档.通过社区右上角搜索搜索已经存在的问题. 写一个简明扼要的标题,并且正文描述清楚你的问题. 提交 BUG:需要带上基础库版本号,设备信息(iOS, Android,开发工具等等),操作系统信息(系统版本),以及可以让他人重现的信息,最好能够提供重现 demo. 对于提供信息过少的问题,会直接关闭,请提供完整信息以后重新打开问题.另外,对于如何做某某功能,可否做某某功能的问题,会直接关闭. 微信小程序常见FAQ(17.8.21-17.8.27) Q:1.5

微信小程序学习指南

作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 微信小程序正式公测, 张小龙全面阐述小程序,定档1月9日上线(附90分钟演讲全文) ... 前言:新人第一坑,跳坑指南:修改后,必须保存:ctrl+S: 1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教

微信小程序疑问解答

最近总结一篇微信小程序解答,作为小程序填坑人深有体会这里的变化,小程序刚发布消息的时候我就说了一个观点,只要小程序提供的组件或API丰富,稳定,兼容性好,才能实现小程序快速开发的理念,先如今还有很多组件的兼容不理想,有一些还在的优化中,因基于小程序这个平台开发限制很大,只能坐等中...如果想用第三方库来实现,小程序明文规定不支持第三方库的做法,这样做最终小程序审核环节百分百的不通过. 1.scroll-view 在 iOS 上存在 bug 在使用这个组件开发页面的时候,因自带滚动效果,Y 轴滑动