首页 > 编程语言 >【uniapp】【微信小程序】wxml-to-canvas

【uniapp】【微信小程序】wxml-to-canvas

时间:2023-09-16 14:25:26浏览次数:45  
标签:uniapp canvas wxml res refs 插件 微信

真是搞吐了,研究了整整两天,困死我了

 本来使用生成二维码插件好好的,插件页也支持导出二维码图片,可是领导说要带上文件的名称,那就涉及html转图片了,当然也可以改二维码插件的源码,不过源码做了混淆,看晕了,放弃了。

试了将微信的原生插件wxml-to-canvas引入uniapp项目,最后捣鼓了好久没捣鼓好,因为微信小程序原生的插件由wxml、wxss文件组成的,不能直接引入page.vue,那就把它放到生成的微信小程序项目文件夹下,可是这样不是一编译又回到解放前么?

后来查到可以将微信小程序的原生插件放在wxcomponents目录下,并且在pages.json中对应的页面配置usingComponents,可是项目跑起来少包了,缺少widget-ui,烦死了,最后跑起来还是报错找不到插件,也许我离黄金只剩一厘米,但是我不要再自己尝试了。

最后回到插件市场下载x-wxml-to-canvas插件,一开始也是用这个插件但是各种报错,现在只能回头再尝试,毕竟2000多的下载量,该是有一定含金量的。于是~打断点,跟代码——发现是插件原代码有点点点点缺陷,稍微改了下...

好家伙,给我整出来了,有view有image,nice~

以下是我记得的x-wxml-to-canvas插件的修改点

data() {
			return {
				canvasId: 'canvas',
				timeId: null,
				canvas: {},
				ctx: null,
				boundary: {}
			};
		},  

注意插件方法的调用顺序(注释掉的代码也是可用的,是直接保存到相册):

createPoster() {
			this.$refs.xWxmlToCanvas.renderToCanvas();
			this.$refs.xWxmlToCanvas.canvasToTempFilePath(); //生成图片
			this.$refs.xWxmlToCanvas.getCanvasImage().then(res => {
				uni.previewImage({
					current: 0,
					urls: [res],
					fail: err => {
						this.$modal.msgError(this.$t('picture-preview-failed'));
					}
				});
				// this.$refs.xWxmlToCanvas.saveImageToPhotosAlbum(res, this.fileName, saveRes => {
				// 	this.$modal.msg('保存成功');
				// });
			});
		} 

因为我的二维码图片是动态的,所以我的wxml模板也是动态生成的

previewImage() {
			return this.$refs.wQrcode.GetCodeImg().then(res => {
				const tempFilePath = res.tempFilePath;
				this.initWxml(tempFilePath);
				this.wxmlIsReady = true;
			});
		}, 

因为wxml-to-canvas插件的初始化是在mounted阶段进行,为了防止他在我获取二维码图片临时地址前做无用功,加了个flag(wxmlIsReady)

<XWxmlToCanvas v-if="wxmlIsReady" ref="xWxmlToCanvas" :hide="true" :width="500" :height="style.container.height" :xStyle="style" :xWxml="wxml" />

  

 

你们看到的图片似乎带了box-shadow,wxml-to-canvas不支持css的box-shadow,我只能自己用view一圈一圈画了,边缘不够模糊,还要继续改进下。

标签:uniapp,canvas,wxml,res,refs,插件,微信
From: https://www.cnblogs.com/abby-lrwei/p/17706670.html

相关文章

  • springboot vue uniapp 小说电子书阅读小程序APP源码
    开发环境及工具:大等于jdk1.8,大于mysql5.5,idea(eclipse),nodejs,vscode(webstorm),HBuilderX技术说明:springbootmybatisvueelementuiuniapp代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。功能介绍:用户端:登录注册首页显示搜索小说,轮播图,最新发布小说(可带推荐算......
  • uniapp+app开发使用muiplayer播放m3u8视频流的不成熟方法
    问题使用uniapp开发手机端app,有一个页面是一个m3u8格式的视频列表,如果使用原版的video标签播放会因为层级最高问题不能滑动被覆盖。方案使用iframe内嵌本地页面(为什么不用webview?webview在模拟器可以显示在真机上就显示不出来,同时手机端的webview的层级是最高的)。代码<......
  • 前端生成二维码,qrcode使用说明,canvas查看大图
    生成二维码用于vue项目通过字符串转换生成二维码的三方插件安装插件npminstall--saveqrcode引入使用importQRCodefrom"qrcode"页面<!--放置二维码的容器--><canvas:id="'qrCode_id'+stringxxxxx"class="qrCode_style"></canvas><!--可......
  • uniapp-文件上传
    一使用uni.uploadFile 二具体实现案例<template><viewclass="container">主页<button@click="getInfo()">测试接口</button></view><view><uni-sectiontitle="选择图片&qu......
  • uniapp VUE-H5页面微信公众号内使用微信JSAPI支付
    注意看本文主要讲解uniapp打包成h5页面并部署在公众号时使用JSAPI的微信支付问题前期准备工作.首先要有一个开通商户注册的公众号,我们需要他的appid;.其次要开通商户公众号的公众号支付的功能并添加域名,开通完成后就可以基本开始我们的开发了既然是jsapi开发自然是要引入的......
  • uniapp-net core后台-实现认证
    一在program.cs中添加cookie认证builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options=>{options.Cookie.Name="auth";options.ExpireTimeSpan=TimeSpan.FromDays(1);options.Sli......
  • uniapp项目实践总结(十五)使用websocket实现简易聊天室
    导语:在一些社交软件中,经常可以看到各种聊天室的界面,接下来就总结一下聊天室的原理个实现方法,最后做一个简易的聊天室,包括登录/登出、加入/离开房间、发送接收聊天消息等功能。目录准备工作原理分析组件实现实战演练服务端搭建案例展示准备工作在pages/index文件夹下......
  • uniapp打包微信小程序包忽然超了
    前言做了一些代码上的修改,打包的时候发现包大小超了,而且超了500多k,已经不能通过压缩图片解决问题了,奇怪的是前几天还可以打包,后来发现是manifest.json中打包压缩字段被改为了false"mp-weixin":{"appid":".....","setting":{"minified":......
  • uniapp在h5调试跨域问题
    在manifest.json中h5里加"devServer":{                 "proxy":{                     "/webadmin":{//接口包含的路径                         "target":"http://221.0.82/",//接口地址ip或......
  • Canvas之画布操作
    目录Canvas之画布操作作者微博: @GcsSloop【本系列相关文章】上一篇Canvas之绘制基本形状中我们了解了如何使用Canvas绘制基本图形,本次了解一些基本的画布操作。本来想把画布操作放到后面部分的,但是发现很多图形绘制都离不开画布操作,于是先讲解一下画布的基本操作方法。一.Canv......