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

本来使用生成二维码插件好好的,插件页也支持导出二维码图片,可是领导说要带上文件的名称,那就涉及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】【微信小程序】wxml-to-canvas的更多相关文章

  1. 微信小程序中使用canvas

    微信小程序中使用canvas会存在的一些问题: 由于小程序在绘制canvas的时候不能加载网络图片 所以需要把网络图片保存到本地之后再进行绘制 downLoadImg: function (netUr ...

  2. uniapp 微信小程序 配置分享朋友和朋友圈

    uniapp 微信小程序 配置分享朋友和朋友圈 首先在小程序中配置微信分享,和微信朋友圈, onShareAppMessage, onShareTimeline 这两个API 和 onLoad 同级目 ...

  3. uniapp微信小程序canvas绘图插入网络图片不显示

    网络图片缓存 在uni中wx可以用uni代替 无区别: 先把要插入的网络图片缓存(getImageInfo); let context = uni.createCanvasContext('first ...

  4. 微信小程序wxml和wxss样式

    对于css不熟悉的android程序员来说,开发微信小程序面临的一个比较困难的问题就是界面的排版了.微信小程序的排版就跟wxml和wxss有关了,它们两者相当于android的布局文件,其中wxml指 ...

  5. 微信小程序 WXML、WXSS 和JS介绍及详解

    前几天折腾了下.然后列出一些实验结果,供大家参考. 百牛信息技术bainiu.ltd整理发布于博客园 0. 使用开发工具模拟的和真机差异还是比较大的.也建议大家还是真机调试比较靠谱. 1. WXML( ...

  6. 微信小程序_(组件)canvas画布

    canvas画布效果 官方文档:传送门 Page({ canvasIdErrorCallback: function (e) { console.error(e.detail.errMsg) }, o ...

  7. 【重点突破】—— UniApp微信小程序开发教程学习Three

    一.实战 HBuilderX:在微信小程序中运行页面,需要设置->安全 开启微信小程序服务端口,HBuilder工具->设置->配置程序路径 网络请求.模板语法.打开页面.页面传参 ...

  8. 用微信小程序开发的Canvas绘制可配置的转盘抽奖

    使用https://github.com/givebest/GB-canvas-turntable代码移植过而来. 其它 微信小程序感觉是个半成品,代码移植过程比较繁琐麻烦.canvas API 部分 ...

  9. 微信小程序 base64 图片 canvas 画布 drawImage 实现

    在微信小程序中 canvas drawImage API 传入的第一个参数是 imageResource 图片资源路径,这个参数通常由从相册选择图片 wx.chooseImage 或 wx.getIm ...

  10. 微信小程序wxml文件中调用自定义函数

    想在微信小程序的wxml文件里自如的像vue那样调用自定义的方法,发现并不成功,得利用WXS脚本语言. WXS脚本语言是 WeiXin Script 脚本语言的简称,是JavaScript.JSON. ...

随机推荐

  1. Java(循环语句,数组)

    Java循环 1.while while( 表达式 ) { //循环内容 } 2.do while do { //循环内容 }while(表达式); 3.for for(初始化; 表达式; 更新) { ...

  2. 【python基础】复杂数据类型-列表类型(数值列表)

    1.数值列表 列表非常适合用于存储数字集合,而python提供了很多工具,可帮助我们高速地处理数字列表. 1.1 range函数 python的range函数能够轻松的生成连续一系列数字. 其语法格式 ...

  3. Asp-Net-Core开发笔记:API版本管理

    前言 对于Web API应用程序而言,随着时间的推移以及需求的增加或改变,API必然会遇到升级的需求.事实上,Web API应用程序应该从创建时就考虑到API版本的问题.业务的调整.功能的增加.接口的 ...

  4. JavaWeb编程面试题——MyBatis

    引言 面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待.不以刷题进大厂为目的,而是以学习为目的.这里的知识点会持续更新,目录也会随时进行调整. 关注公众号:编 ...

  5. 深入理解注解驱动配置与XML配置的融合与区别

    摘要:本文旨在深入探讨Spring框架的注解驱动配置与XML配置,揭示两者之间的相似性与差异. 本文分享自华为云社区<Spring高手之路2--深入理解注解驱动配置与XML配置的融合与区别> ...

  6. RT-Thread线程构建

    RT-Thread 操作系统的启动过程如下 main()函数作为其中的一个线程在运行. 如果想新建一个线程,和main()线程并行运行,步骤如下:   第一步:线程初始化函数申明 static voi ...

  7. Flash Download failed -“Cortex-M3”

    STM32下载程序时经常出现如下问题,即    error:Flash Download failed -"Cortex-M3" 经查找网络攻略,总结如下: (1). (2). ( ...

  8. instance norm

    与Batch Norm加快计算收敛不同, IN是在[1]中提出的,目的是提高style transfer的表现. 计算如下: \[IN(x)=\gamma (\frac{x-\mu(x)}{\sigm ...

  9. 编译器性能调优:使用C++11实现高效编译器

    目录 1. 引言 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍 <编译器性能调优:使用C++11实现高效编译器> 编译器是计算机程序的入口点,将源代码转换为可执行文 ...

  10. 基于Node.js的分布式应用程序架构设计与最佳实践:实现高效、可扩展的分布式系统

    目录 基于Node.js的分布式应用程序架构设计与最佳实践:实现高效.可扩展的分布式系统 随着互联网的普及和发展,分布式系统已经成为现代应用程序中不可或缺的一部分.而Node.js作为当前最流行的Ja ...