小程序使用画布截图

小程序之页面滚动固定导航栏

1、 wxml 页面

使用画布来站位,并给按钮添加绑定事件

<button class='btn btn-theme' bindtap='setSaveImage'>保存图片到本地</button>

<!-- 使用画布站位-->
<canvas hidden="{{canvasHidden}}" canvas-id='imageCanvas'class='imageCanvas' 
style='width:{{canvasWidth}}px; height:{{canvasHeight}}px'  disable-scroll='true'>

</canvas>
2、 js文件绑定方法
  /**
   * 保存图片到本地
   */
  setSaveImage:function(e){
    var that = this;
    wx.showLoading({
      title: '图片生成中...',
    })
    var res = '';
    //调用画图方法
    that.drawImages();
    
  },
  
  /**
   * 画图方法
   */
  drawImages:function(){
    let that = this;
    // console.log(that.data);
    that.canvasHidden = false;
    //轮播图图片
    // var banner_image = that.data.imgUrls[0];
    
    //网络图片地址无法用画布截取到,故使用微信获取图片信息的接口,来设置网络图片地址
    that.getImageInfo(that.data.imgUrls[0]);
    
    //二维码图片
    var qrcode_image = that.data.imagePath;
    //标题
    var title = that.data.goodsInfo.title;

    let context = wx.createCanvasContext('imageCanvas', that);
    context.setFillStyle('#fff');
    //绘制矩形的宽高
    context.fillRect(0, 0, 375, 356);

    //绘制轮播图
    context.drawImage(that.data.banner_image_url, 0, 0, 375,180);
    
    //绘制标题
    context.setFontSize(14);
    context.setFillStyle("#000")
    context.fillText(title, 26, 228)  //绘制描述

    //绘制二维码图 x y width height  
    context.drawImage(qrcode_image, 228, 200, 130, 130);
    // context.draw();
    context.draw(false,that.drawCallBack);

  },
  
    /**
   * 绘制画布回调函数
   */
  drawCallBack:function(){
    var that = this
    wx.canvasToTempFilePath({
      // x:0,
      // y:0,
      // width: that.data.canvasWidth,
      // height: that.data.canvasHeight,
      canvasId: 'imageCanvas',
      fileType: 'jpg',
      success: function (res) {
        var shareImg = res.tempFilePath;
        // console.log(shareImg)
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success(res) {
            wx.hideLoading();
            wx.showToast({
              title: '保存成功',
              icon: 'success',
              duration: 2000
            });
          }
        })

      },
      fail: function (res) {
        cosole.log(res, '<-fail res')
      }
    })
  },
    
    /**
   * 设置画布宽高
   */
  setCanvasSize:function(){
    var that = this;
    wx.getSystemInfo({
      success: function (res) {
        console.log(res);
        var myCanvasWidth = res.windowWidth;
        var myCanvasHeight = res.windowHeight;
        that.setData({
          canvasWidth: myCanvasWidth,
          canvasHeight: myCanvasHeight
        });
      },
    })
    
  },

  /**
   * 根据url获取图片信息
   */
  getImageInfo(ewmbgurl) {
    if (typeof ewmbgurl === 'string') {
      var that = this;
      wx.getImageInfo({   //  小程序获取图片信息API
        src: ewmbgurl,
        success: function (res) {
          that.setData({
            banner_image_url: res.path
          })
        },
        fail(err) {
          console.log(err)
        }
      })
    }
  },

3、画布api的方法说明
    /**
     * x        => x坐标
     * y        => y坐标
     * width    => 矩形宽
     * height   => 矩形高
     */
    context.fillRect(0, 0, 375, 356);

     /**
     * x        => x坐标
     * y        => y坐标
     */
    context.fillText(title, 26, 228)
    
    /**
     * img_url  => 图片地址
     * x        => x坐标
     * y        => y坐标
     * width    => 矩形宽
     * height   => 矩形高
     */
    context.drawImage(qrcode_image, 228, 200, 130, 130);
    
    /**
     * boolean              => 是否接着上次绘制
     * that.drawCallBack    => 回调函数
     */
    context.draw(false,that.drawCallBack);
            
        
4、注意事项
    1. 图片地址如果是网络地址,可能会出现在ide中可以正常截图,但是在手机上变成空白,所以建议使用上面
    获取图片信息的方法
    2. 画布截图的宽高以及位置可根据自己的需求进行修改
    3. 由于获取图片信息方法是异步通知,所以画布的后续操作可以放在success 里面操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268