微信小程序带二维码海报功能开发

一.技术栈

   1.画布组件

       <canvas style="width: 300px; height: 300px;" canvas-id="firstCanvas"></canvas>

   2.js画布绘制对象以及常用方法

     CanvasContext wx.createCanvasContext(string canvasId, Object this)

   3.获取小程序码,getWXACodeUnlimit,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。

实际开发中, 不能使用wx.request()请求域名https://api.weixin.qq.com

POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

var color = {

            r: '247',

            g: '218',

            b: '0'

          }

          var paramJson = {

            scene: num,

            width: 100,

            is_hyaline: true,

            auto_color: false,

            line_color: color

          }

          var paramString = JSON.stringify(paramJson)

          wx.request({

            url:

              'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' +

              _this.access_token,

            method: 'POST',

            data: paramString,  此处参数不能有{}包起来

            responseType: 'arraybuffer', 

})

   4.后端 API,access_token 是小程序全局唯一后台接口调用凭据。getAccessToken接口  GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

二.遇到坑的地方

        1.this.firstCanvasContext.fillText(_this.nickName, 105, 105)每画一次,如果需要改变文字的颜色和样式,每次都要重新更新。

    

        2.this.firstCanvasContext.drawImage()的第一个参数,图片路径,参数不能使用base64,可参考链接   微信小程序常见问题


       3.可以使用wx.getImageInfo({

                src:

                  // 'https://wx.qlogo.cn/mmopen/vi_32/zq5E68O5DTiccQBEVAJLhEFrQKN6admqDQuLXrJuqXrR9x2ibdO1wpKeicr00BKt5MW0LxJ0ibAAecibH6gmDSqPPsg/132',

                  'https://yun.wzz1809.com/00005.png',

                success(res) {

                  console.log('getImageInfo成功!')

                  var tempFilePath = res.path

                  console.log('tempFilePath:' + tempFilePath)

                 _this.firstCanvasContext.drawImage(

                       tempFilePath,

                    // 'https://yun.wzz1809.com/00005.png',

                    20,

                    63,

                    71,

                    71

                  )

_this.firstCanvasContext.draw(true, function() {

                    wx.canvasToTempFilePath({

                      x: 0,

                      y: 0,

                      width: 300,

                      height: 300,

                      destWidth: 300,

                      destHeight: 300,

                      canvasId: 'firstCanvas',

                      fileType: 'png',

                      success(res) {

                        console.log(res.tempFilePath)

                        _this.savePhotoTemp = res.tempFilePath

                      }

                    })

                  })

    }

})   要求图片的域名必须是微信后台配置的合法的downloadFile,可以使用临时路径画图片,必须注意,由于这个接口是异步的,所以后面的draw()必须写在里面,不然将会画不出来

      

       4. wx.request({

                responseType: 'arraybuffer',

                url:

                  'https://wx.qlogo.cn/mmopen/vi_32/zq5E68O5DTiccQBEVAJLhEFrQKN6admqDQuLXrJuqXrR9x2ibdO1wpKeicr00BKt5MW0LxJ0ibAAecibH6gmDSqPPsg/132',

                success(res) {

                  console.log('res', res)

                  var tempFilePath = wx.arrayBufferToBase64(res.data)

                  console.log('res.data:' + res.data)

                  console.log('tempFilePath:' + tempFilePath)

                _this.base64 = 'data:image/PNG;base64,' + tempFilePath 

       }

})

可以将请求的图片转成base64,然后可以通过 <img class="baseImg" :src="base64" /> 渲染出来


         5.如果不是小程序,前端仍然可以通过接口的图片二进制文件转成base64,

function transformArrayBufferToBase64 (buffer) {

  var binary = '';

  var bytes = new Uint8Array(buffer);

  for (var len = bytes.byteLength, i = 0; i < len; i++) {

      binary += String.fromCharCode(bytes[i]);

  }

  return window.btoa(binary);

}

var oReq = new XMLHttpRequest();

oReq.open("get", "http://www.fanji.com/h5/zhjl/pic_jl.php?arry=25&url=123456", true);

oReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

oReq.responseType = "arraybuffer";

oReq.onload = function (oEvent) {

console.log(encodeURIComponent(transformArrayBufferToBase64(oReq.response)));

};

oReq.send();


 

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

推荐阅读更多精彩内容