微信小程序wxml2canvas的使用以及遇到的一些问题

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

最近入坑了的一个laji(拼音)项目,各种天花乱坠、异想天开的功能,给我整头大了(菜是原罪)。具体功能呢就是需要将页面元素转为图片,然后将图片和音乐制成视频(搞不了根本搞不了,丢给后端兄弟了),当然了,不能一口吃成一个大胖子,更何况嘴都还没张开,然后就开始面向百度编程找到其他一些解决方案,但是还是入坑了wxml2canvas。

参考以下:

Wxml2Canvas -- 快速生成小程序分享图通用方案 | 微信开放社区README.md · 疯狂的世界/wxml2canvas - Gitee.com

一、安装插件

找到项目位置,打开终端(cmd命令窗口),命令行输入npm init,然后就是回车回车...,完成之后再执行以下命令

npm install wxml2canvas

安装完成要记得构建npm:工具–>构建npm

第二步 引入

const Wxml2Canvas = require('Wxml2Canvas ')

或者

import Wxml2Canvas from 'wxml2canvas'

第三步 使用

首先你需要在你的页面上创建一个canvas以及需要生成图片的内容,例如我的:

<canvas canvas-id="myCanvas" style="width: {{canvasWidth}}px; height:{{canvasHeight}}px;position: absolute; left: -9999px;" />
    <view class="travel2 my_draw_canvas" data-type="text" id="travel2">
        <view class="photo-center my_draw_canvas" data-type="text" data-background="#fff">
            <image src="../../static/travel/photo7.png" class="photo-image7 my_draw_canvas" data-type="image" data-url="../../static/travel/photo7.png"  />
            <textarea 
                data-type="text" data-text="{{descList[1].description}}"
                class="input-border-none desc-bottom-left my_draw_canvas" 
                placeholder="请输入你最想留下的" 
                value="{{descList[1].description}}"
                data-index="1"
                bindblur="remarkBlurAction"
                bindconfirm="remarkConfirm">
            </textarea>
        </view>
    </view>

可以看到我们需要为要在canvas上显示在图片的内容添加data-type属性,如果内容为图片则添加data-type="image",为文本则添加data-type="text",其次就是图片的地址data-url以及显示的文字data-text。

通过事件就可以获取到我们要的图片了

    async generateCanvases(){
        wx.showLoading({
            title: '请稍候,该过程耗时较长...',
            mask: true
       })
        const that = this
        let base64List = []
        for (let i = 0; i < 9; i++) {
            let url = await that.startDraw(`travel${i+1}`,`.travel${i+1} .my_draw_canvas`)
            let base64 = await auth.downloadAndConvert(url)
            base64List.push(base64)
        }
        if(base64List.length === 9){
            //查看图片
            wx.previewImage({
              urls: base64List,
            })
        }
    },
    startDraw(containerName, drawClass) {
        let that = this
        return new Promise((resolve, reject) => {
            const query = wx.createSelectorQuery().in(that);
            query.select(`#${containerName}`).fields({
              size: true,
              scrollOffset: true
            }, data => {
              const width = data.width;
              const height = data.height;
              that.setData({
                canvasWidth: width,
                canvasHeight: height
              })
              const drawMyImage = new Wxml2Canvas.default({
                element: 'myCanvas',
                obj: that,
                width: that.data.canvasWidth * 2,
                height: that.data.canvasHeight * 2,
                background: '#fff',
                finish: url => {
                  resolve(url)
                },
                error: res => {
                  wx.hideLoading();
                }
              });
              drawMyImage.draw({
                list: [
                  {
                    type: 'wxml',
                    class: drawClass,
                    limit: `.${containerName}`,
                    x: 0,
                    y: 0
                  }
                ]
              }, that);
            }).exec();
        });
      }

四、遇到的一些问题

1、引入Wxml2Canvas 之后一直报错TypeError: wxml2canvas.default is not a constructor

解决:将new wxml2canvas({...})改为Wxml2Canvas.default({...})即可

2、Wxml2Canvas不支持设置border-radius、transform、writing-mode等等,目前没找到解决方案

3、Wxml2Canvas不支持设置z-index

解决:可使用data-delay属性,来实现延迟绘制(值越大则越晚绘制)

五、结束

该文章只作为自己遇到问题的记录,主要还是自己菜的问题,就这样,希望它能帮解决遇到相同的问题文章来源地址https://www.toymoban.com/news/detail-627424.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日
    浏览(35)
  • uni-app 微信小程序 图文生成图片 wxml-to-canvas

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月07日
    浏览(31)
  • towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本

    towxml3.0 支持以下功能: ● echarts图表,默认禁用,需自行构建以开启此功能 ● LaTeX数学公式,默认禁用,需搭建解析服务并自行构建以开启此功能 ● yuml图表,默认禁用,需要搭建解析服务并自行构建以开启此功能 ● highlight代码高亮,默认开启(默认仅开启bash、javascript、

    2024年04月26日
    浏览(23)
  • 微信小程序使用canvas绘制网络图片,使用canvas将图片变成圆形

    以上的写法 会造成某些图标无法绘制上去, 解决方法是在网络图片中不断嵌套,先绘制大图片,再绘制小图片的顺序 网上说使用先下载到本地,再使用img.src加载,我尝试过还是不行 长用在海报,需要将用户的头像画到canvas图片上,如: 其原理就是在图片上面放一个圆

    2024年02月13日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包