Advertisement

微信小程序绘制海报

阅读量:

该文本介绍了在小程序中使用Wxml2Canvas库进行海报绘制的功能,包括导入库、创建需要转换的WXML元素、绘制海报标题以及保存海报的过程。文本还详细描述了如何通过Wxml2Canvas库的drawMyCanvas方法动态生成海报,并通过savePoster方法保存生成的图片。此外,文本还涉及了权限判断功能,包括使用getSetting方法获取用户设置信息、检查用户权限以及通过authorize方法进行授权操作。整个流程从功能快捷键的使用到具体代码实现,均进行了详细说明。

这里写自定义目录标题

该方法在性能方面令人惊叹地超越了asio,归功于其优雅的设计和简洁的代码结构。

  • 功能快捷键

  • 生成标题

  • 调整文本样式

  • 插入链接和图片

  • 插入代码块

  • 创建有序列表

  • 调整文本居中、居左或居右对齐

  • 制作表格

  • 使用SmartyPants语法进行文本美化

  • 自定义化列表的构建

    • 注脚的创建方法
    • 详尽的注释支持
    • 高效的数学公式显示
    • 新增甘特图功能,为内容增色不少
    • 提供专业的UML图表展示
    • 支持高效的FLowchart流程图绘制
    • 全方位的导出功能与导入操作
    • 导出操作可灵活配置
    • 导入操作支持多种格式

在小程序开发中导入Wxml2Canvas库。在wxml文件中生成需要转换成图片的元素。

绘制海报标题

<button @click=“drawMyCanvas”>绘制海报

复制代码
    import Wxml2Canvas from 'wxml2canvas';
    export default {
    	data() {
    		return {
    			imgUrl: '',
    			width: 0,
    			height: 0
    		};
    	},
    	onLoad() {},
    	onReady() {},
    	methods: {
    		drawMyCanvas() {
    			Taro.showLoading();
    			const that = this;
    			const query = Taro.createSelectorQuery().in(this);
    			query
    				.select('#my-canvas')
    				.fields(
    					{
    						// 选择需要生成canvas的范围
    						size: true,
    						scrollOffset: true
    					},
    					data => {
    						let width = data.width;
    						let height = data.height;
    						that.width = width;
    						that.height = height;
    						that.startDraw();
    					}
    				)
    				.exec();
    		},
    		startDraw() {
    			console.log(2);
    			let that = this;
    			// 创建wxml2canvas对象
    			let drawMyImage = new Wxml2Canvas(
    				{
    					element: 'myCanvas', // canvas的id,
    					obj: that, // 传入当前组件的this
    					width: that.width * 2,
    					height: that.height * 2,
    					progress(percent) {
    						// 进度
    						// console.log(percent);
    					},
    					finish(url) {
    						console.log(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(imgUrl) {
    			const that = this;
    			Taro.saveImageToPhotosAlbum({
    				filePath: imgUrl,
    				success: function() {
    					Taro.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'
    					) {
    						Taro.showModal({
    							title: '提示',
    							content: '需要您授权保存相册',
    							showCancel: false,
    							success: modalSuccess => {
    								Taro.openSetting({
    									success(settingdata) {
    										if (settingdata.authSetting['scope.writePhotosAlbum']) {
    											Taro.saveImageToPhotosAlbum({
    												filePath: imgUrl,
    												success: function() {
    													Taro.showToast({
    														title: '保存成功',
    														icon: 'success',
    														duration: 2000
    													});
    												}
    											});
    										} else {
    											Taro.showToast({
    												title: '授权失败,请稍后重新获取',
    												icon: 'none',
    												duration: 1500
    											});
    										}
    									}
    								});
    							}
    						});
    					}
    				}
    			});
    		}
    	}
    };

首先,判断用户是否具有保存相册的权限。如果当前权限不足,将引导用户获取必要的权限。通过调用getSetting()方法,获取用户的基本设置信息。检查用户是否拥有相册管理权限,具体可通过查看res.authSetting[‘scope.writePhotosAlbum’]字段的值来判断。如果用户已获得相册管理权限,则可以直接保存画布。如果当前未授权,则需要先申请获取相册管理权限。调用authorize()方法,向用户发送授权请求。若用户尚未授权,系统将立即弹窗提示用户确认是否授权小程序使用相关功能或访问用户数据。需要注意的是,此时不会执行任何实际的授权接口调用。若用户之前已授权,则授权请求将直接返回成功,无需弹窗提示。授权成功后,可以直接保存画布。如果用户取消授权,则下次再次申请时将直接报错。此时,需要手动引导用户重新进入设置,调用openSetting()方法,重新获取授权。

复制代码
    Taro.getSetting().then(res => {
          if (!res.authSetting['scope.writePhotosAlbum']) {
              Taro.authorize({
                  scope: 'scope.writePhotosAlbum',
                  success() {
                      that.savePoster('#myCanvas')
                  },
                  fail() {
                  }
              }).catch(() => {
                  Taro.showModal({
                      content: '检测到您没打开下载图片功能权限,是否去设置打开?',
                      confirmText: "确认",
                      cancelText: "取消",
                      success(res2) {
                          //点击“确认”时打开设置页面
                          if (res2.confirm) {
                              Taro.openSetting({
                                  success(res3) {
                                      if (res3.authSetting['scope.writePhotosAlbum']) {
                                          that.savePoster()
                                      }
                                  }
                              })
                          } else {
                              console.log('用户点击取消')
                          }
                      }
                  })
              })
          } else {
              that.savePoster()
          }
      })

保存海报

复制代码
    savePoster() {
      const that = this;
      try {
        this.$store.commit('setLoading', true);
        Taro.createSelectorQuery()
        .select('#myCanvas')
        .fields({
            node: true,
            size: true,
        })
        .exec((res) => {
            const width = res[0].width
            const height = res[0].height
    
            const canvas = res[0].node
            Taro.canvasToTempFilePath({
              x: 0,
              y: 0,
              width: 670,
              height: 1000,
              destWidth: 670 * Taro.getSystemInfoSync().pixelRatio,
              destHeight: 1000 * Taro.getSystemInfoSync().pixelRatio,
              canvas: canvas,
              quality: 1,
              success: (res1) => {
                console.log("res1.tempFilePath", res1.tempFilePath)
                that.posterUrl = res1.tempFilePath;
                Taro.showShareImageMenu({
                  path: res1.tempFilePath
                })
              },
              fail: (re) => {
              }
            })
        })
      } catch(e) {
      }
    },

新的改变

我们对Markdown编辑器进行了功能升级和语法扩展,在原有功能的基础上,新增了以下几项实用功能,帮助你更高效地完成博客写作。

  1. 全新界面设计将为用户提供全新的写作体验;
  2. 在创作中心,你可以根据喜好设置代码高亮样式,而Markdown会根据你的选择展示相应的代码高亮样式;
  3. 新增了图片拖拽功能,用户可以直接将本地图片拖拽至编辑区域进行展示;
  4. 全新的KaTeX数学公式语法已正式引入,为用户提供更强大的数学公式支持;
  5. 新增了支持甘特图的mermaid语法1功能,用户可以轻松绘制甘特图;
  6. 多屏幕编辑功能的引入,让Markdown文章编辑更加便捷;
  7. 新增了多种功能,包括焦点写作模式、预览模式、简洁写作模式以及左右区域同步滚轮设置。功能按钮则安置在编辑区域与预览区域之间;
  8. 新增了检查列表功能,方便用户进行列表管理。

功能快捷键

撤销功能的快捷方式是:Ctrl/Command + Z;重做操作的快捷方式是:Ctrl/Command + Y;加粗的快捷方式是:Ctrl/Command + B;斜体的快捷方式是:Ctrl/Command + I;标题的快捷方式是:Ctrl/Command + Shift + H;无序列表的快捷方式是:Ctrl/Command + Shift + U;有序列表的快捷方式是:Ctrl/Command + Shift + O;检查列表的快捷方式是:Ctrl/Command + Shift + C;插入代码的快捷方式是:Ctrl/Command + Shift + K;插入链接的快捷方式是:Ctrl/Command + Shift + L;插入图片的快捷方式是:Ctrl/Command + Shift + G;查找的快捷方式是:Ctrl/Command + F;替换的快捷方式是:Ctrl/Command + G。

合理的创建标题,有助于目录的生成

输入一个#符号后,按回车生成1级标题;输入两个#符号后,按回车生成2级标题。依此类推,我们支持最多6级标题。有助于通过TOC语法快速创建一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片:

Alt

带尺寸的图片:

Alt

居中的图片:

Alt

居中并且带尺寸的图片:

Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

访问博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样采用该高亮方式的代码片。

复制代码
    // An highlighted block
    var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown Text-to- HTML conversion tool

Authors John

复制代码
 Luke 

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML。

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

如果你需要进一步了解LaTeX 数学表达式的详细说明,请访问here.

新的甘特图功能,丰富你的文章

2014年1月7日至21日,按计划完成相关任务:已完成、进行中、计划一、计划二及现有任务。具体任务为:添加GANTT图功能到mermaid。

  • 关于 甘特图 语法,参考 这儿,

UML 图表

支持使用UML图表进行可视化渲染。 Mermaid. 例如,以下展示了一个由该工具生成的序列图:

嗨!李四,最近怎么样?

最近怎么样呀,王五?

我很好,谢谢!

我很好,谢谢!

李四沉思了一会儿,觉得文字太长了,不适合一行书写。

不太适合一行,内容太长。

李四端详着王五,若有所思。

看着王五,嗯,挺好的。

王五,你呢?

这将产生一个流程图。:

链接

长方形

圆角长方形

菱形

  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no

  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你希望体验此编辑器,可以在本文档中随时编辑。完成写作后,通过工具栏的导出功能,生成.md或.html文件以本地保存内容。

导入

你想导入一篇你已写过的.md文件,在上方工具栏可以选择导入功能,执行对应文件类型(如.md)的导入操作,继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

*[HTML]: 超文本标记语言

全部评论 (0)

还没有任何评论哟~