小程序生成海报携带参数-云函数生成二维码

2023-05-16

1. 逻辑代码

 async qcFn() {
    console.log('生成海报');
    let that = this
    const houseId = this.data.houseDetail._id
    const refferId = app.globalData.openid
    // houseDetail?id=${this.data.houseDetail._id}&refferId=${app.globalData.openid}`);
    //换取海报地址
    const url = 'cloud://renthouse-3gy8st7ycb91abf9.7265-renthouse-3gy8st7ycb91abf9-1308122562/素材/编组 11.png'

    // 生成海报
    wx.showToast({
      title: '海报生成中...',
      icon: 'loading',
      duration: 1000
    });
    // that. ();
    setTimeout(function () {
      wx.hideToast()
      that.setData({
        maskHidden: true
      });
    }, 1000);
    // ********测试
    console.log('生成海报22');
    //获取数据
    this.setData({
      userInfo: app.globalData.userInfo,
    })
    let { houseDetail, title, location, tagselected, houseMoney } = this.data.houseDetail
    // const ctx = wx.createCanvasContext('mycanvas')
    const ctx = wx.createCanvasContext('starkImg')
    //清除画布上在该矩形区域内的内容
    ctx.clearRect(0, 0, 375, 670);
    // ctx.clearRect(0, 0, 291, 479);
    //设置填白色充色
    ctx.setFillStyle("#fff")
    //填充一个矩形。用 setFillStyle 设置矩形的填充色,如果没设置默认是黑色
    ctx.fillRect(0, 0, 375, 670)
    // ctx.strokeStyle = ("red");//设置描边颜色
    // 背景图
    const bgc_tmp = await this.downloadFile(url)//海报的本地地址
    // const bgc_tmp = await this.getImageInfoFn(url)//海报的本地地址
    ctx.drawImage(bgc_tmp, 0, 0, 375, 670) //以iPhone 6尺寸大小为标准绘制图片
    ctx.setStrokeStyle('rgba(0, 0, 0, 0.06)');



    // 保存绘图上下文。
    ctx.save();
    // ctx.setShadow(10, 50, 50, 'rgba(0, 0, 0, 0.01)')
    ctx.setShadow(10, 50, 50, 'rgba(255, 255, 255, 1)')

    const x = 40
    const y = 44
    // const y = 444
    const w = 300
    // const h = 88
    const h = 488
    const r = 10
    ctx.beginPath();
    ctx.moveTo(x + r, y);

    // 右上角弧线
    ctx.arcTo(x + w, y, x + w, y + r, 10);
    // https://juejin.cn/post/6990910784523993118
    // http://www.yanghuiqing.com/web/350
    // 右下角弧线
    ctx.arcTo(x + w, y + h, x + w - r, y + h, r);
    // 左下角弧线
    ctx.arcTo(x, y + h, x, y + h - r, r);
    // 左上角弧线
    ctx.arcTo(x, y, x + r, y, 10);


    ctx.fill() //对当前路径中的内容进行填充。默认的填充色为黑色。
    ctx.closePath() //关闭一个路径。会连接起点和终点。如果关闭路径后没有调用 fill 或者 stroke 并开启了新的路径,那之前的路径将不会被渲染。
    // ctx.stroke() //\描绘的的路径是从 beginPath() 开始计算,但是不会将 strokeRect() 包含进去。
    ctx.clip(); //从原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。可以在使用 clip 方法前通过使用 save 方法对当前画布区域进行保存,并在以后的任意时间通过restore方法对其进行恢复。
    console.log('生成海报33');
    // 房屋图片
    const house_tmp = await this.getImageInfoFn(this.data.houseDetail.pictures[0])//海报的本地地址
    console.log('生成海报44', house_tmp);
    ctx.drawImage(house_tmp, 40, 44, 300, 400)
    // ctx.save();
    //房源标题
    ctx.restore()//恢复之前保存的绘图上下文。
    ctx.setFontSize(16) //字体大小
    ctx.setFillStyle('rgba(51, 51, 51, 1)') //背景颜色,默认颜色为 black。
    ctx.setTextBaseline('top')
    const titlestr = this.fittingString(ctx, title, 290) //调用文本溢出的方法
    ctx.fillText(titlestr, 56, 452) //在画布上绘制被填充的文本

    console.log('house_tmp');
    // 地图坐标icon
    const mapicon = 'cloud://renthouse-3gy8st7ycb91abf9.7265-renthouse-3gy8st7ycb91abf9-1308122562/素材/map3.png'
    const mapicon_tmp = await this.getImageInfoFn(mapicon)//海报的本地地址
    ctx.drawImage(mapicon_tmp, 53, 500, 29, 29,)

    // 房源位置
    ctx.setTextBaseline('top') //文字对齐方式
    ctx.setFillStyle('rgba(102, 102, 102, 1)') //背景颜色,默认颜色为 black。
    // ctx.fillStyle('rgba(102, 102, 102, 1)')
    ctx.setFontSize(14) //字体大小
    ctx.fillText(location, 87, 510) //在画布上绘制被填充的文本
    // ctx.save()
    console.log('房源标签');
    // 房源标签
    // ctx.restore()//恢复之前保存的绘图上下文。
    ctx.setFillStyle('rgba(153, 153, 153, 0.8)') //背景颜色,默认颜色为 black。
    ctx.setFontSize(14) //字体大小
    ctx.fillText(tagselected[0], 56, 480);
    ctx.fillText(tagselected[1], 118, 480);

    // 房源价格
    ctx.setFillStyle('rgba(86, 119, 248, 1)') //背景颜色,默认颜色为 black。
    ctx.setFontSize(16) //字体大小
    ctx.fillText(`${houseMoney}元/月`, 260, 510);

    ctx.restore()//恢复之前保存的绘图上下文。
    //二维码信息 ---见云函数
    let qrResult = await wx.cloud.callFunction({
      name: "qrCodeFile",
      data: { type: "createQRCode", houseId, refferId }
    })
    const qrcode_tmp = await this.downloadFile(qrResult.result)//二维码的本地地址
    ctx.drawImage(qrcode_tmp, 68.29, 559.49, 72.16, 72.16);


    //长按识别二维码
    var qcInfo = "长按识别二维码";
    ctx.setFontSize(14) //字体大小
    // ctx.setFontSize(14);
    ctx.setTextBaseline('top') //文字对齐方式
    ctx.setFillStyle('#333');
    // ctx.font = 'normal bold 14px sans-serif';
    ctx.fillText(qcInfo, 161.08, 573.48);
    ctx.stroke('red');//画出当前路径的边框。默认颜色色为黑色


    //查看房源详情
    let titledel = "查看房源详情";
    ctx.setFontSize(14);
    ctx.setFillStyle('#333333'); //背景颜色
    // ctx.font = 'normal bold 18px sans-serif';
    ctx.fillText(titledel, 161.08, 607.056);
    // ctx.stroke();
    ctx.draw();


    console.log('生成海报55');

    setTimeout(function () {
      console.log('737');
      wx.canvasToTempFilePath({
        // x: 0,
        // y: 0,
        // width: 291,
        // height: 479,
        destWidth: 375,
        destHeight: 670,
        canvasId: 'starkImg',
        success: function (res) {
          console.log('制期间耗时', res);
          console.log(res.tempFilePath);
          that.setData({
            imagePath: res.tempFilePath,
            hidden: false
          })

          console.log('imagespath', that.data.imagePath);
          wx.hideLoading()

        },
        fail: function (res) {
          console.log(res)
        }
      })
    }, 500);


  },

2. 在线链接转本地链接

  // 在线链接转换本地链接地址
  async getImageInfoFn(Image) {
    let temp = await wx.getImageInfo({
      src: Image,
    })
    return temp.path
  }

3. 云函数

const cloud = require("wx-server-sdk")
const uuid = require('uuid')
cloud.init()
const db = cloud.database()
const wxContext = cloud.getWXContext()
exports.main = async (event, ctx) => {
  const uuidStr = uuid.v4().replace(/-/g, "")
  console.log('uuidStr', uuidStr);
  db.collection('qrcodeOptions').add({
    data: {
      uuid: uuidStr,
      options: event
    }
  })
  console.log('生成二维码', event);
  const result = await cloud.openapi.wxacode.getUnlimited({
    // wxacode.getUnlimited:获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制
    page: 'packageA/pages/houseDetail/houseDetail',
    scene:`${uuidStr}`,
    // "scene": 'a=1',
    "checkPath": false,
    "envVersion": 'develop'
  })

  const upload = await cloud.uploadFile({
    // cloudPath: cloudPath,
    cloudPath: `QRCodeFolder/${Math.floor(Math.random() * 1000)}.png`,
    fileContent: result.buffer
  })
  console.log('upload', upload);
  return upload.fileID

}

4. html页面

html页面
  <view class='imagePathBox' hidden="{{maskHidden == false}}">
    <image src="{{imagePath}}" class='shengcheng' ></image>
    <button class='baocun' bindtap='baocun'>点击保存至相册,分享到朋友圈</button>
</view>
<view hidden="{{maskHidden == false}}" class="mask"></view> 
<view class="canvas-box">
    <canvas  style="width:375px;height:670px;position:fixed;top:9999px" canvas-id="starkImg"/>
</view>  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序生成海报携带参数-云函数生成二维码 的相关文章

  • git基础

    1 git的相关配置 git自带一个git config工具来帮忙配置变量 xff0c git中这些变量存储在3个不同的位置并且有相关命令进行配置 xff0c 如下 xff1a git config system xff1a 存储在 etc
  • 单例模式----双重检查锁

    双重检查锁 双重检查锁 xff1a 双检锁 xff1a 单例模式中用volatile和synchronized来满足双重检查锁机制 xff1b 在实现单例模式的时候往往会忽略掉多线程的情况 xff0c 就是写的代码在单线程的情况下是没问题的
  • 【CSDN】 关于博客中图片水印有关问题

    默认效果 https img blog csdnimg cn 20210202141712123 png x oss process 61 image watermark type ZmFuZ3poZW5naGVpdGk shadow 10
  • C++(一)— cout输出格式 (待完善)

    C 43 43 cout输出格式 ios dec以10进制表示整数ios hex以16进制表示整数ios oct以8进制表示整数ios showbase为整数添加一个表示其进 制的前缀ios internal在符号位和数值的中间插入需要数里
  • 判断两台设备是否属于同一子网的简易程序(C++实现)

    给定ip地址与子网掩码 xff0c 通过与运算判断是否属于同一子网 xff1a span class token macro property span class token directive hash span span class
  • Win11中换源失败

    按照之前在win10中的换源方法 xff0c 在 condarc中换源 xff0c 因为pip时下载网速依旧很慢 xff0c 所以发现换源并不成功 xff0c 并且没有在下载的时候有如下图所示的换源语句 Looking in indexes
  • px4连接不了mavros的原因

    本人多次试过机载重装系统后初次安装mavros 出现mavros连接不上的问题 一 USB接口电压不够 我之前遇到过的一种就是当px4通过USB线接入机载 xff0c 启动mavros时 xff0c 一直连接不上 xff0c 而且px4上常
  • Jetson Xaiver NX 安装 librealsense2-SDK

    在Jetson Xaiver NX上使用英特尔的相机 xff0c 我们需要安装相机的驱动 xff0c 以下提供两种方法进行安装 注 xff1a 采用手动安装方法可以驱动D400系列的相机 但驱动不了T265 xff0c 如果需要同时驱动D4
  • PX4机载连接通过IP连接电脑QGC地面站

    PX4接入Jetson系列机载时 xff0c 因为Jetson系列机载为ARM架构 xff0c 没有对应的QGC地面站可以安装使用 在平时的连接都是通过将PX4接USB线连接至电脑 xff0c 通过电脑的QGC进行各种校准和参数更改 接入机
  • 一次成功流水帐 ros中使用serial包实现串口通信debug和教程汇总

    会参考以下几个教程 xff0c 但是这几个都不完整 ros中使用serial包实现串口通信 鲁班班班七号的博客 CSDN博客 ros 串口通信 ROS使用serial库编译时出现 未定义的引用 解决办法 学术马的博客 CSDN博客 ros编
  • Haar特征+Adaboost人脸识别C实现

    Haar特征 43 Adaboost的人脸识别C实现 xff0c 部分简单的功能借助Opencv实现 xff0c 数据是MIT人脸数据 程序的实现主要是参考 Rapid Object Detection using a Boosted ca
  • Redhat6.5出现不识别CPU

    Detected CPU family 6 model 6Z UNSUPPORTED HARDUARE DEVICE CPU family 6 model gt 59 Redhat6 5版本会出现开机不是别cpu重启服务器 xff0c 可解
  • 爬取豆瓣网站前top250电影名称和评分保存到本地excel中(附效果图和代码)

    import requests from lxml import etree import xlwt headers 61 39 User Agent 39 39 Mozilla 5 0 Windows NT 10 0 Win64 x64
  • CentOS和Ubuntu有什么不同

    很多的初学者在刚开始接触Linux的时候 xff0c 是否有很多疑问 xff0c Linux有上百个系统到达有什么区别 Linux代表探索和自由 因为Linux在技术上代表内核的意思 内核是为设备提供驱动程序 网络通信 文件系统 进程管理等
  • Ubuntu系统各个版本

    http releases ubuntu com releases
  • ArduSub ROV无法前进

    本方案仅适用于ArduSub 控制系统的ROV xff0c 本方案参考ArduSub 官网http www ArduSub com 里的解决方法 问题描述 xff1a 本人在ROV实验中遇到的问题 xff1a 使用遥控器控制ROV向前行驶时
  • STM32F103C8T6核心板——引脚使用注意!!!

    STM32F103C8T6核心板 引脚使用注意 xff01 xff01 xff01 有的引脚与下载JTAG端口复用 有的与BOOT复用 xff0c 若发生引脚不够使用的情况 xff0c 可以将他们进行一点特殊的设置 xff0c 变成普通引脚
  • Keil5_因为临时环境变量造成的编译错误

    Keil5 因为临时环境变量造成的编译错误 如果安装本文所附文件 xff08 注册时打开两个软件都需要管理员权限运行 xff09 仍有同样问题 xff0c 原因可能有如下四个可能 一 电脑用户名使用了中文 解决办法 xff1a 更改为英文
  • STM32_CUBE_IDE_工程的导入和导出

    STM32 CUBE IDE 工程的导入和导出 1 我们写好了代码想要上传到代码仓库共享给别人怎么办 xff0c 就需要先导出工程再上传而不能直接将工程代码直接上传 2 导出工程 3 上传到码云仓库 4 导入之前导出的工程 导出工程 导出的
  • 常见驱动电路

    常见驱动电路 1 基础知识补充 xff08 三极管和MOS管 xff09 2 网上搜集的一些资料 xff08 个人认为可行 xff09 3 实践中使用过的一些驱动电路 4 学习开发板上面的驱动电路 三极管和MOS管的区别 1 三极管和MOS

随机推荐

  • VScode+keil插件-取代keil开发不要太爽了

    VScode 43 keil插件 取代keil开发不要太爽了 前言 xff1a 之前几年开发都是使用的keil xff0c 所以基本所有工程都是keil的工程 xff0c 一时间开发项目还不能及时转变使用HAL库开发 xff08 stm32
  • 关于maven项目中pom.xml文件报红问题的解决方法

    主要原因是可能需要的依赖没有进行自动的加载到本地仓库 xff0c 可以通过设置File gt Settings 设置好maven的本地仓库的位置以及maven的位置 xff0c 即可解决依赖的问题
  • 网络调试助手——局域网广播消息——模拟HTTP服务器

    网络调试助手 局域网广播消息 模拟HTTP服务器 前言 xff1a 作为一名嵌入式开发者 xff0c 不能熟练使用网络调试助手 xff0c 我羞愧至极 xff0c 赶紧弄明白记录下来才是正事 怎么使用网络调试助手向局域网广播消息 注释 xf
  • AT89C51、AT89S51、STC89C51有什么区别?

    标题AT89C51 AT89S51 STC89C51有什么区别 xff1f 1 首先明确一点 xff0c 这几个型号都属于51单片机 xff0c 程序和电路是通用的 xff1b 2 AT89C51是美国ATMEL公司生产的 xff0c 下载
  • 新装的GIT需要配置秘钥才能正常使用

    新装的GIT需要配置秘钥才能正常使用 实际这个过程就是git配置SSH 1 打开git 命令行终端输入指令生成秘钥 操作过程 xff1a 连击三次回车 xff0c 如下图即为成功 ssh span class token operator
  • 正则表达式_总结

    正则表达式 总结 说明 xff1a 限定SpinBox控件的输入范围 span class token comment 限定输入框为1 120 span SpinBox span class token punctuation span i
  • 电路设计_运算放大器应用

    电路设计 运算放大器应用 说明 xff1a 运算放大器是个万用宝 xff0c 要好好利用起来 xff0c 1 电压跟随 xff1a 起到隔离作用 xff0c 高阻抗变低阻抗 2 同向比例放大器 xff1a 放大输入电压信号 xff0c 在输
  • ESP32_IDF_基于win11的开发环境搭建

    ESP32 IDF 基于win11的开发环境搭建 说明 xff1a 1 安装ofline 2 编译下载 xff08 本来打算使用vscode配合使用来开发的 xff0c 奈何vscode环境真难搞 xff0c 放弃了 xff0c 用不惯 x
  • 树莓派的联网方式

    树莓派的多种联网方式 配置WiFi文件将空白的ssh文件放入sd卡配置WiFI文件 家庭局域网或热点查找树莓派ip 通过网线联网 配置WiFi文件 在sd卡中烧录系统之后 xff0c sd卡中会有如下程序 xff1a 将空白的ssh文件放入
  • STM32F103系列PWM波

    话不多说 xff0c 直接上我能跑通的代码 pwm h span class token macro property span class token directive hash span span class token direct
  • HTTP的几种认证方式之DIGEST 认证(摘要认证) 服务端

    https www cnblogs com xy ouyang p 12609387 html
  • Ubuntu 22.04LTS中使用aptitude来解决build-essential安装过程中过高版本包依赖问题

    小白近日安装完Ubuntu 22 04LTS后 xff0c 记不清是不是用了Software Updater还是自己手动upgrade了包 xff0c 导致在配置编译工具build essential 输入sudo apt install
  • 解决com.github.penggle kaptcha 2.3.2 报错

    需要从该地址处kaptcha的jar包下载位置 xff0c 从该地址下载jar包后 xff0c 可以把该jar包存放在C Users hp Desktop这个位置 xff0c 通过windows的cmd命令进入命令操作界面 执行以下命令 x
  • children 获取所有的子元素节点 2020/11/21

    children 获取所有的子元素节点 也是我们实际开发常用的 span class token operator lt span span class token operator span span class token consta
  • window常见事件 2020/11/24

    window onload是窗口 xff08 页面 xff09 加载时间 xff0c 当文档内容完全加载完成后触发该事件注意 xff1a window onload传统注册事件方式只能写一次 xff0c 如果有多个 xff0c 会以最后一个
  • 用if函数,进入无限循环,如何退出当前函数

    用if函数 xff0c 进入无限循环 xff0c 如何退出当前函数 wxml文件 span class token operator lt span view class span class token operator 61 span
  • form-type:submit和reset用法

    form type submit和reset用法 span class token operator lt span form bindsubmit span class token operator 61 span span class
  • checkbox背景颜色设置

    checkbox背景颜色设置 js文件 data span class token punctuation span languages span class token punctuation span span class token
  • MongoDB安装方案

    安装MongoDB 黑马头条项目 43 人力资源后台项目的接口服务均采用了 MongoDB 43 KOA2 技术栈 xff0c 所以在使用本地服务之前 xff0c 我们需要首先安装MongoDB xff0c 这也是该环节中出问题最多的一项
  • 小程序生成海报携带参数-云函数生成二维码

    1 逻辑代码 span class token keyword async span span class token function qcFn span span class token punctuation span span cl