小程序页面生成图片保存分享——笔记

效果图:


canvas生成
导出图片

wxml:

<canvas bindtap='click' canvas-id='canvas' class='share' style='width:{{screenWidth}}px;height:{{screenHeight -64 }}px' hidden='{{canvasHidden}}'></canvas>

<cover-view  class='canvas-save' bindtap='saveImageToPhotosAlbum' hidden='{{canvasHidden}}' > <button> 保存到手机</button></cover-view > 

css:

.share{ position: fixed; z-index: 1111; background-color: #f2f2f2; left: 0px; top: 0px}

.canvas-save{position:fixed; z-index: 9999; bottom: 100rpx; text-align: center;width: 100%}

.canvas-save button{ background-color: #3998F7; color: #fff; width: 300rpx; height: 80rpx; display: inline-block; font-size: 30rpx}

js:

var project_name;

var pm10;

var air_quality;

var dust_time;

var screenWidth;

var screenHeight;

var drawing = false; /*避免多次点击保存按钮*/

var imgFilePath;

Page({

  data: {

    canvasHidden: true,

    code:''

  },

  //页面加载处理函数

  onLoad: function (options) {

    const that = this;

    var id = options.id

    if (id) {

      wx.request({

        url: '数据请求地址',

        data: { 'id': id },

        header: {

          'content-type': 'application/x-www-form-urlencoded'

        },

        method: 'POST',

        // 请求成功后执行

        success: function (res) {

          project_name = res.data.content.project_name;

          pm10 = res.data.content.pm10;

          air_quality = res.data.content.air_quality;

          dust_time = res.data.content.dust_time;


          //获取用户设备信息,屏幕宽度

          wx.getSystemInfo({

            success: res => {

              that.setData({

                screenWidth: res.screenWidth,

                screenHeight: res.screenHeight

              })

              screenWidth = res.screenWidth;

              screenHeight = res.screenHeight -64;//减去微信头部高度

            }

          })


          wx.showLoading({

            title: '图片生成中',

          })

          that.setData({

            canvasHidden: false,

            code: res.data.code,

          })

          that.canvasdraw();

        }

      })

    } else {

      wx.showToast({

        title: '参数错误,请重试',

        icon: 'none',

      })

    }

  },

  // 绘制canvas

  canvasdraw: function (share) {

    let that = this;

    let canvas = wx.createCanvasContext('canvas');

    // 处理文字居于中心位置

    var imgw = screenWidth / 2 - 58;

    var qw = screenWidth / 2 - 35;

    var aw = screenWidth / 2 + 40;

    var time = screenWidth / 2 - 45;

    var area = screenWidth / 2 + 50;

    var circle = "../../images/circle.png";

    var redcircle = "../../images/redcircle.png";

    var bg = "../../images/bg.png";

    var bgh = screenHeight - 100;

  //下载小程序码到本地

    wx.downloadFile({

      url: that.data.code,

      success: function (msg) {


        if (msg.statusCode === 200) {

          if (pm10>100) {

            // 绘制pm10

            canvas.setFontSize(26)

            canvas.setFillStyle("#f00")

            canvas.textAlign = 'center';

            canvas.fillText(pm10, screenWidth / 2, 160)

            // 绘制圆形图

            canvas.drawImage(redcircle, imgw, 100, 120, 100)

            // 绘制空气质量

            canvas.setFontSize(13)

            canvas.setFillStyle("#f00")

            canvas.fillText(air_quality, aw, 225)

          }

          else{

            // 绘制pm10

            canvas.setFontSize(26)

            canvas.setFillStyle("#1A7CDE")

            canvas.textAlign = 'center';

            canvas.fillText(pm10, screenWidth / 2, 160)

            // 绘制圆形图

            canvas.drawImage(circle, imgw, 100, 120, 100)

            // 绘制空气质量

            canvas.setFontSize(13)

            canvas.setFillStyle("#05950F")

            canvas.fillText(air_quality, aw, 225)


          }

          // 绘制项目名称

          canvas.setFontSize(17)

          canvas.setFillStyle("#000")

          canvas.textAlign = 'center';

          canvas.fillText(project_name, screenWidth / 2, 60)


          // 绘制pm10

          canvas.setFontSize(13)

          canvas.setFillStyle("#666")

          canvas.fillText('pm10', screenWidth / 2, 180)

          // 绘制空气质量

          canvas.setFontSize(13)

          canvas.setFillStyle("#666")

          canvas.fillText('空气质量', qw, 225)


          // 绘制时间

          canvas.setFontSize(13)

          canvas.setFillStyle("#666")

          canvas.textAlign = 'center';

          canvas.fillText(dust_time, screenWidth / 2, 250)


          // 绘制背景

          canvas.drawImage(bg, 0, bgh, screenWidth, 120)

          // 绘制线条

          canvas.setStrokeStyle('#ccc')

          canvas.strokeRect(40, 280, screenWidth - 80, 160)

          //绘制提示

          canvas.setFontSize(14);

          canvas.fillStyle = "#999999";

          canvas.setTextAlign('center');

          canvas.fillText('长按识别小程序', screenWidth / 2, 420);

          //绘制小程序码

          canvas.drawImage(msg.tempFilePath, screenWidth / 2 - 55 , 290 , 110, 110)

          canvas.draw(true, setTimeout(function () {

            that.daochu()

          }, 1000));

        }else{

          wx.showToast({

            title: '图片生成错误!',

            icon: 'none',

            duration: 2000

          })

        }

      }

    })

  },

  //导出生成指定大小的图片

  daochu: function () {

    var that = this;

    wx.canvasToTempFilePath({

      x: 0,

      y: 0,

      width: screenWidth,

      height: screenHeight,

      destWidth: screenWidth * 3,  //3倍像素  更清晰

      destHeight: screenHeight * 3,

      canvasId: 'canvas',

      fileType: 'jpg',//设置图片类型,否则到处图片无背景色

      success: function (res) {

        imgFilePath = res.tempFilePath

        wx.hideLoading();

        //that.saveImageToPhotosAlbum(res.tempFilePath)

      },

      fail: function (err) {

        console.log(err)

      }

    })

  },

  //保存至相册

  saveImageToPhotosAlbum: function () {

    console.log(imgFilePath)

    wx.saveImageToPhotosAlbum({

      filePath: imgFilePath,

      success: (res) => {

        wx.showToast({

          title: '保存成功',

          icon: 'success',

          duration: 2000

        })

        drawing = false

      },

      fail: (err) => {

        wx.showToast({

          title: '保存失败',

          icon: 'none',

          duration: 2000

        })

        drawing = false

      }

    })

  },

  // 点击图片预览

  click: function () {

    wx.previewImage({

      urls: [imgFilePath],

    })

  }

});

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

推荐阅读更多精彩内容