微信小程序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属性,来实现延迟绘制(值越大则越晚绘制)
五、结束
该文章只作为自己遇到问题的记录,主要还是自己菜的问题,就这样,希望它能帮解决遇到相同的问题
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfjbbk
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01