使用wxml2canvas将微信小程序页面转为图片

这篇具有很好参考价值的文章主要介绍了使用wxml2canvas将微信小程序页面转为图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近有个微信小程序项目,需要将页面转为图片。微信小程序提供的Api是wx.canvasToTempFilePath,这个方法是将画布指定区域的内容导出生成指定大小的图片,但是我们是将页面导出图片,所以可以使用wxml2canvas解决

1、安装wxml2canvas

npm init
npm install wxml2canvas --save --production

npm init 是npm初始化,这个时候根据编译器终端一路回车最终会生成一个package.json文件

--production 是减少安装与业务无关的包,减少项目的体积。

2、引入wxml2canvas

import Wxml2Canvas from 'wxml2canvas'

引入之后需要对微信开发者工具做出如下设置,否则引入之后会报错

使用wxml2canvas将微信小程序页面转为图片

 其次选择微信开发者工具--》工具---》构建npm

这个时候就不会报错了

3、使用wxml2canvas

首先在需要生成图片的wxml文件中创建canvas容器以及选择生成图片的范围

<canvas canvas-id="myCanvas" class="myCanvas"></canvas>
<view id="my-canvas" class="my_canvas>
    <view class="header my_draw_canvas">
        <image class="headerImg my_draw_canvas" src="{{order.headerImg}}" data-type="image" data-url="{{order.headerImg}}"></image>
        <text class="headerTitle my_draw_canvas" data-type="text" data-text="您的订单详情">您的订单详情</text>
    </view>
</view>

每个需要生成图片的内容,需要注明类型。

text标签对应的data-type='text',image标签对应的data-type=‘image’

data-text=‘需要展示的文本’  data-url='需要展示的图片'

其他的data-type类型可以参考https://github.com/liudongyun1215/wxml2canvas

这个链接里面包含了许多配置项,就不一一列举了,遇到问题的时候可以参考这个文档

js文件的方法

drawMyCanvas() {
        wx.showLoading()
        const that = this
        const query = wx.createSelectorQuery().in(this);
        query.select('#my-canvas').fields({ // 选择需要生成canvas的范围
            size: true,
            scrollOffset: true
        }, data => {
            let width = data.width;
            let height = data.height;
            that.setData({
                width,
                height
            })
            setTimeout(() => {
                that.startDraw()
            }, 1500);
       }).exec()
},
startDraw() {
        let that = this
        
        // 创建wxml2canvas对象
        let drawMyImage = new Wxml2Canvas({
          element: 'myCanvas', // canvas的id,
          obj: that, // 传入当前组件的this
          width: that.data.width * 2,
          height: that.data.height * 2,
          background: '#141415', // 生成图片的背景色
          progress(percent) { // 进度
            // console.log(percent);
          },
          finish(url) { // 生成的图片
            wx.hideLoading()
            that.savePoster(url)
          },
          error(res) { // 失败原因
            console.log(res);
            wx.hideLoading()
          }
        }, this);
        let data = {
            // 获取wxml数据
            list: [{
                type: 'wxml',
                class: '.my_canvas .my_draw_canvas',  // my_canvas要绘制的wxml元素根类名, my_draw_canvas单个元素的类名(所有要绘制的单个元素都要添加该类名)
                limit: '.my_canvas', // 要绘制的wxml元素根类名
                x: 0,
                y: 0
            }]
        }
        // 绘制canvas
        drawMyImage.draw(data, this);
    },
savePoster() {
        const that = this
        wx.saveImageToPhotosAlbum({
            filePath: that.data.imgUrl,
            success: function() {
                wx.showToast({
                    title: '保存成功',
                    icon: 'none',
                    duration: 1500
                });
            },
            fail(err) {
              if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") {
                wx.showModal({
                  title: '提示',
                  content: '需要您授权保存相册',
                  showCancel: false,
                  success: modalSuccess => {
                    wx.openSetting({
                      success(settingdata) {
                        if (settingdata.authSetting['scope.writePhotosAlbum']) {
                            wx.saveImageToPhotosAlbum({
                                filePath: that.data.imgUrl,
                                success: function () {
                                  wx.showToast({
                                    title: '保存成功',
                                    icon: 'success',
                                    duration: 2000
                                  })
                                },
                            })
                        } else {
                            wx.showToast({
                                title: '授权失败,请稍后重新获取',
                                icon: 'none',
                                duration: 1500
                            });
                        }
                      }
                    })
                  }
                })
              }
            }
          })
      },

4、注意

使用wxml保存图片的时候,如果包含在线的图片链接,需要在微信小程序后台设置白名单,将在线链接的域名放置downloadFile合法域名里,否则生成图片的时候会报错

使用wxml2canvas将微信小程序页面转为图片

还有就是页面上的标签需要有宽度,否则模拟器导出正常,真机导出样式就会乱文章来源地址https://www.toymoban.com/news/detail-415662.html

到了这里,关于使用wxml2canvas将微信小程序页面转为图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序中使用wxml-to-canvas

    1. 下载: npm install wxml-to-canvas --save 2. json文件导入 3、使用组件  index.wxml index.js demo.js中的配置

    2024年02月13日
    浏览(33)
  • 无插件,简单配置prettier,将微信小程序的wxml和wxss当作html和css进行格式化

    使用prettier的项目、安装了prettier扩展的vscode和微信开发者工具。 prettier是根据默认的解析器对相应的文件进行处理,我们可以自定义什么格式的文件用什么解析器。具体看 documentSelectors。 只列出有关的配置 编辑器的配置 设置wxml和wxss文件的默认格式化工具为prettier 配置pre

    2024年02月09日
    浏览(34)
  • uni-app 微信小程序 图文生成图片 wxml-to-canvas

    在做的小程序要增加一个将文字与图片生成图片不可修改的功能,第一次做,在网上找了不少资料。参考了wxml-to-canvas | 微信开放文档  ,又看了一些相关事例,尝试写了一下。   需要准备的文件及配置项: 1、先把代码片段下载到本地 2、创建wxcomponents目录,把代码片段中的

    2024年02月09日
    浏览(32)
  • 【微信小程序】wxml模板的使用

    目录 一,wxml模板 1.什么是 WXML 2. 什么是 WXSS 3.WXSS 和 CSS 的区别 4 .JS 逻辑交互 二,小程序的宿主环境 1.宿主环境简介 1.什么是宿主环境 2. 小程序的宿主环境 3.宿主环境包含内容 2 通信模型

    2024年02月04日
    浏览(30)
  • 微信小程序wxml使用过滤器

    如何在微信小程序wxml使用过滤器/格式化字串?(常用就是格式化字符串) 犹如Angular使用pipe管道(过滤器)这样子方便,用的最多就是时间格式化。 下面是实现时间格式化的方法和步骤: 插入代码: 在 wxml 中使用

    2024年02月07日
    浏览(32)
  • 《微信小程序》在wxml中使用函数

    在wxml中使用函数有两种方法 方法一:在wxml中直接添加模块,就可以在wxml中直接引用,举个例子 方法二:新建wxs文件,在文件中写入函数,举个例子

    2024年02月16日
    浏览(30)
  • 微信小程序:如何在{{}}中使用函数?WXML+WXS

    在原生小程序的项目中或有这种需求,就是在wxml页面中调用方法 但是微信原生小程序 无法直接使用像vue里面的计算属性,监听啦啥的这种,也不能调用js中的方法。  既然{{}}中无法调用js中的函数,那该怎么办呢? 微信提出了一种新的概念,WXS(WeiXin Script) ,小程序的一套脚

    2024年02月16日
    浏览(34)
  • 将微信小程序页面转为图片

    最近做项目遇到一个需求,那就是要将某个页面转为图片然后传给后端,我仔细找了一圈,发现官方那个Api也就是wx.canvasToTempFilePath生成的图片很有可能为空,太坑了,于是我放弃用它了,选择了用wxml2canvas。 npm init 是npm初始化,这个时候根据编译器终端一路回车最终会生成

    2024年02月11日
    浏览(29)
  • 微信小程序在 wxml 文件中使用 Array.includes 方法

    微信小程序中不能直接在wxml使用includes,否则 不起作用 需要通过wxs使用: 1、在wxs下创建一个includes.wxs  2、在wxml中使用 先引入 后使用

    2024年02月11日
    浏览(34)
  • 释放创造力!探索微信小程序中的wxml-to-canvas绘图组件

    wxml-to-canvas 是一个用于在微信小程序中将WXML(微信小程序界面语言)转换为Canvas绘图的组件。 官方文档 下面是关于 wxml-to-canvas 的优点、缺点和应用场景的概述: 绘制灵活: wxml-to-canvas 组件可以将WXML中的各种元素、样式和布局转换为Canvas绘图,提供了更多绘制的自由度。

    2024年02月07日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包