微信小程序生成二维码海报并分享

这篇具有很好参考价值的文章主要介绍了微信小程序生成二维码海报并分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:点击图标,生成海报后,点击保存相册,可以保存

生成海报:插件wxa-plugin-canvas,此处使用页面异步生成组件方式,官网地址:wxa-plugin-canvas - npm

二维码:调用后端接口生成二维码

1.二维码按钮

          <!-- 二维码按钮 -->
          <view class="item" bindtap="onCreatePoster">
            <van-icon name="scan" size="20px" />
            <view class="icon-title">
              二维码
            </view>
          </view>

2.二维码海报显示图层

<!-- 二维码海报:注意布局要和其他元素独立 -->
<view bindtap="closePoster">
  <!-- 一定要设置元素的id="poster" -->
  <poster id="poster" config="{{posterConfig}}" bind:success="onPosterSuccess" bind:fail="onPosterFail"></poster>
  <view wx:if="{{posterShow}}" class="popup-mask"></view>
  <view wx:if="{{posterShow}}" class="posterImg-box">
    <image mode="widthFix" class="posterImg" src="{{posterImg}}"></image>
    <view class="btn-create" data-pic="{{basicInfo.pic}}" catchtap="savePosterPic">保存到相册</view>
  </view>
</view>

3.点击按钮后异步生成海报

需要调用获取图片信息接口wx.getImageInfo(),获取到图片的宽高以做整体宽高配置

  /**
     * 异步生成海报
     */
    async onCreatePoster() {
      console.log("异步生成海报");
      // 获取二维码信息(实质是后端生成的一张二维码图片)
      const qrRes = await createQRCode({id: this.data.basicInfo.id});
      console.log(qrRes,"qrRes");

      // 获取图片信息,图片获取成功后调用方法生成海报
      const pic = this.data.basicInfo.pic;
      wx.getImageInfo({
        src: pic,
        success:(res)=> {
          console.log(res.width)
          // console.log(res.height)
          const height = 490 * res.height / res.width
            // setData配置数据,数据配置完成后,生成海报
            this.createPosterDone(height, qrRes.data);
        }
      })
    },
  createPosterDone(picHeight,qrCode){
    const _this = this
    const _baseHeight = 74 + (picHeight + 120)
    this.setData({
      posterConfig: {
         // 海报总宽高
        width: 750,
        height: picHeight + 660,
        backgroundColor: '#fff',
        debug: false,
        // 图片所在容器起始位置,宽高等配置
        blocks: [{
          x: 76,
          y: 74,
          width: 604,
          height: picHeight + 120,
          borderWidth: 2,
          borderColor: '#c2aa85',
          borderRadius: 8
        }],
        // 图片配置
        images: [{
            x: 133,
            y: 133,
            url: _this.data.goodsInfoList.basicInfo.pic, // 商品图片
            width: 490,
            height: picHeight
          },
          {
            x: 76,
            y: _baseHeight + 199,
            url: qrCode, // 二维码
            width: 222,
            height: 222
          }
        ],
        // 文字信息:商品标题、价格、二维码处文字
        texts: [{
            x: 375,
            y: _baseHeight + 80,
            width: 650,
            lineNum: 2,
            text: _this.data.goodsInfoList.basicInfo.name,
            textAlign: 'center',
            fontSize: 40,
            color: '#333'
          },
          {
            x: 375,
            y: _baseHeight + 180,
            text: '¥' + _this.data.goodsInfoList.basicInfo.minPrice,
            textAlign: 'center',
            fontSize: 50,
            color: '#e64340'
          },
          {
            x: 352,
            y: _baseHeight + 320,
            text: '长按识别小程序码',
            fontSize: 28,
            color: '#999'
          }
        ],
      }
    }, () => {
      Poster.create(this.data.posterConfig, this);
    });
  },

4.海报生成成功后将海报数据(海报临时路径)和是否显示海报层,存放到data中

data:{
        // 二维码海报配置
    posterConfig:{},
    // poster显示标识
    posterShow: false,
    // 保存到相册的图片
    posterImg: ''
},

onPosterSuccess(e){
    console.log("二维码生成成功");
    this.setData({
      posterImg: e.detail,
      posterShow: true
    })
  },

5.点击海报任何位置,除了保存到相册按钮,隐藏海报层

closePoster方法绑定到最外层

保存按钮使用catchbind阻止冒泡,即可防止点击保存时也会关掉海报层

<!-- 二维码海报:注意布局要和其他元素独立 -->
<view bindtap="closePoster">
  <!-- 一定要设置元素的id="poster" -->
  <poster id="poster" config="{{posterConfig}}" bind:success="onPosterSuccess" bind:fail="onPosterFail"></poster>
  <view wx:if="{{posterShow}}" class="popup-mask"></view>
  <view wx:if="{{posterShow}}" class="posterImg-box">
    <image mode="widthFix" class="posterImg" src="{{posterImg}}"></image>
    <view class="btn-create" data-pic="{{basicInfo.pic}}" catchtap="savePosterPic">保存到相册</view>
  </view>
</view>
  // 关闭海报
  closePoster(){
    this.setData({
      posterShow: false
    })
  },

6.点击保存到相册按钮,调用wx.saveImageToPhotosAlbum()方法保存图片到本地

注意wx.saveImageToPhotosAlbum()方法的参数filePath不能是绝对路径或者网络图片,必须是临时图片。所以在生成海报成功后需要将图片保存到data的posterImg中,保存时用这个就可以了文章来源地址https://www.toymoban.com/news/detail-842182.html

// 保存海报到相册
  savePosterPic(e){
    console.log("保存到相册",e);
    console.log(this.data.posterImg);//http://tmp/xlHB02MBJ50H9887bf9a40b5b5dc24b904e4132afcb0.png
    wx.saveImageToPhotosAlbum({
      // 不能直接使用this.data.basicInfo.pic的图片
      // "saveImageToPhotosAlbum:fail https://file.winwebedu.com/mall/collage-01.jpg not absolute path"
      filePath: this.data.posterImg,
      success(res) { 
        wx.showToast({
          title: '保存成功',
        })
      },
      fail(err){
        console.log(err);
        wx.showToast({
          title: '保存失败',
        })
      },
      // 无论成功与否关闭海报
      complete(){
        this.setData({
          posterShow: false
        });
      }
    })
  },

7.补充,如果要直接生成二维码不使用异步

<poster class="wxcode-box" id="poster" config="{{posterConfig}}" bind:success="onPosterSuccess" bind:fail="onPosterFail">
            </poster>

  onPosterSuccess(e){
    // console.log("二维码生成成功");
    const { detail } = e;
    console.log(detail);
    wx.previewImage({
        current: detail,
        urls: [detail]
    })
  },
  
  posterConfig配置:
  jdConfig: {
        width: 750,
        height: 1334,
        backgroundColor: '#fff',
        debug: false,
        pixelRatio: 1,
        blocks: [
            {
                width: 690,
                height: 808,
                x: 30,
                y: 183,
                borderWidth: 2,
                borderColor: '#f0c2a0',
                borderRadius: 20,
            },
            {
                width: 634,
                height: 74,
                x: 59,
                y: 770,
                backgroundColor: '#fff',
                opacity: 0.5,
                zIndex: 100,
            },
        ],
        texts: [
            {
                x: 113,
                y: 61,
                baseLine: 'middle',
                text: '伟仔',
                fontSize: 32,
                color: '#8d8d8d',
            },
            {
                x: 30,
                y: 113,
                baseLine: 'top',
                text: '发现一个好物,推荐给你呀',
                fontSize: 38,
                color: '#080808',
            },
            {
                x: 92,
                y: 810,
                fontSize: 38,
                baseLine: 'middle',
                text: '标题标题标题标题标题标题标题标题标题',
                width: 570,
                lineNum: 1,
                color: '#8d8d8d',
                zIndex: 200,
            },
            {
                x: 59,
                y: 895,
                baseLine: 'middle',
                text: [
                    {
                        text: '2人拼',
                        fontSize: 28,
                        color: '#ec1731',
                    },
                    {
                        text: '¥99',
                        fontSize: 36,
                        color: '#ec1731',
                        marginLeft: 30,
                    }
                ]
            },
            {
                x: 522,
                y: 895,
                baseLine: 'middle',
                text: '已拼2件',
                fontSize: 28,
                color: '#929292',
            },
            {
                x: 59,
                y: 945,
                baseLine: 'middle',
                text: [
                    {
                        text: '商家发货&售后',
                        fontSize: 28,
                        color: '#929292',
                    },
                    {
                        text: '七天退货',
                        fontSize: 28,
                        color: '#929292',
                        marginLeft: 50,
                    },
                    {
                        text: '运费险',
                        fontSize: 28,
                        color: '#929292',
                        marginLeft: 50,
                    },
                ]
            },
            {
                x: 360,
                y: 1065,
                baseLine: 'top',
                text: '长按识别小程序码',
                fontSize: 38,
                color: '#080808',
            },
            {
                x: 360,
                y: 1123,
                baseLine: 'top',
                text: '超值好货一起拼',
                fontSize: 28,
                color: '#929292',
            },
        ],
        images: [
            {
                width: 62,
                height: 62,
                x: 30,
                y: 30,
                borderRadius: 62,
                url: 'https://img.yzcdn.cn/vant/cat.jpeg',
            },
            {
                width: 634,
                height: 634,
                x: 59,
                y: 210,
                url: 'https://b.yzcdn.cn/vant/icon-demo-1126.png',
            },
            {
                width: 220,
                height: 220,
                x: 92,
                y: 1020,
                url: 'https://img.yzcdn.cn/vant/cat.jpeg',
            },
            {
                width: 750,
                height: 90,
                x: 0,
                y: 1244,
                url: 'https://b.yzcdn.cn/vant/icon-demo-1126.png',
            }
        ]

    },

到了这里,关于微信小程序生成二维码海报并分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp开发微信小程序生成二维码海报

    模板:

    2024年02月12日
    浏览(57)
  • 微信小程序生成页面分享二维码(代码亲测有效)

    说明: 获取不限制的小程序码 | 微信开放文档 以上是官网链接,可以自行查看 不懂的可以留言告诉我

    2024年02月11日
    浏览(58)
  • uni-app(微信小程序) 根据小程序页面路径(可带参数) 生成二维码、分享码

    微信官方文档 小程序 看文档点这里 第一个获取小程序码,就是根据你要通过二维码打开的页面路径生成一个小程序码,且这个小程序码是永久的 其实文档内也说明了,很少用到。即使需要生成这样的小程序码,可以去微信公众平台的小程序管理后台生成,还方便。 调用方

    2024年02月06日
    浏览(65)
  • 生成微信小程序发布上线后的二维码 、获取微信小程序二维码、微信小程序二维码如何生成?

    情景: 1、在微信小程序审核完成,发布到线上后,想通过扫描小程序二维码进入小程序 2、可分享二维码出去,通过二维码扫码进入小程序 方法: 1、进入微信小程序的后台配置。链接:微信公众平台。(如图一) 2、进入 “设置” -- “ 基本设置” -- “小程序码及线下物

    2024年02月12日
    浏览(57)
  • 微信小程序怎样生成体验版二维码?微信小程序怎么转化为二维码?

    方法:在微信开发者工具界面,右上角,点击上传,如果提示成功,说明已经上传成功。     网址: 微信公众平台 微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。 https://mp.weixin.qq.com/ 在微信公众号平台登录,选择需要生成二维码的小程序

    2024年02月10日
    浏览(83)
  • 如何生成微信小程序二维码,小程序内页二维码

    你自己得有个微信公众号,只需要知道小程序的名字就可以了 生成小程序二维码 第一步编辑素材 第二步搜索小程序名字,然后回车,下一步 第三步选小程序码 小程序内页二维码 第一步编辑素材 第二步搜索小程序名字,然后回车,下一步 第三步点击‘获取更多路径’ 第四

    2024年02月15日
    浏览(51)
  • 微信小程序 — 生成二维码功能

    微信小程序实现生成二维码功能。需要用到canvas组件,设置 type为2d.  需要使用js包 weapp-qrcode-canvas-2d https://github.com/DoctorWei/weapp-qrcode-canvas-2d weapp-qrcode-canvas-2d 是使用新版canvas-2d接口在微信小程序中生成二维码(外部二维码)的js包。canvas 2d 接口支持同层渲染且性能更佳,可大

    2024年02月09日
    浏览(60)
  • 微信小程序之生成二维码

     var context = wx.createCanvasContext(\\\'mycanvas\\\'); // 获取画布 CanvasContext.fillText string text 在画布上输出的文本 number x 绘制文本的左上角 x 坐标位置 number y 绘制文本的左上角 y 坐标位置 number maxWidth 需要绘制的最大宽度,可选 CanvasContext.drawImage string imageResource 所要绘制的图片资源(网络

    2024年02月10日
    浏览(50)
  • 微信小程序实现预约生成二维码

    业务需求 :点击预约按钮即可生成二维码凭码入校参观~ 如下是博主自己写的wxml: 以及wxss: 去Gitee下载工具包: 二维码工具包 http://​ https://gitee.com/WeiDoctor/weapp-qrcode-canvas-2d ​ 下载zip:     将dist文件夹中的js文件全部复制到utils目录下: 如下代码必须完整的导入再页面

    2024年04月15日
    浏览(55)
  • 微信小程序生成二维码的 方式

    一:生成普通的二维码 https://open.weixin.qq.com/sns/getexpappinfo?appid=xxxpath=xxx?a=123 appid:小程序的appid path: 小程序的路径 a:小程序需要携带的参数,不传可以不写 二:在微信开发文档内生成 步骤1.登录微信公众平台 2.找到工具菜单 3.选择生成小程序码 具体里面的有生成规则,不懂得

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包