【小程序】如何手动绘制分享用的图片

本文介绍了在微信小程序中通过canvas元素和绘图上下文实现滑动翻页产品的图片生成,包括布局、尺寸获取、文本和图片的绘制,以及最终将图片保存至相册用于分享到朋友圈的功能。主要涉及的技术点包括canvas绘图、微信小程序API的使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇【小程序】如何实现滑动翻页中介绍了如何在小程序中实现上下滑动翻页的效果。

如果要给这个产品增加一个生成图片用于分享到朋友圈的功能,又该如何实现呢?

先来看一下最终的效果图:

首先,新建一个页面(page),布局文件如下:

<!-- pages/biases/share.wxml -->
<view class="container">
  <canvas id="myCanvas" type="2d" />
  <view class="save-btn" bind:tap="onSavePicture">
    <text>Save to Album</text>
  </view>
</view>

这里 id=myCanvascanvas 就是我们需要绘制图片用的画布。

它的 CSS 属性如下:

#myCanvas {
   
   
  margin: 40rpx 0;
  width: calc(100% - 80rpx);
  height: 80%;
  box-shadow: 2px 2px 16px 4px rgba(0, 0, 0, 0.2);
}
CSS 属性 含义
margin: 40rpx 0; 设置元素上下的边距为40rpx(rpx是微信小程序中的响应式像素单位),左右边距为0
width: calc(100% - 80rpx); 将元素的宽度设置为其父容器宽度减去80rpx
height: 80%; 将元素的高度设置为其父容器高度的80%
box-shadow: 2px 2px 16px 4px rgba(0, 0, 0, 0.2); 给元素应用一个阴影效果,水平偏移量为2px,垂直偏移量为2px,模糊半径为16px,扩展半径为4px,颜色为rgba(0, 0, 0, 0.2)(表示稍微透明的黑色)

布局和样式都非常简单,难点是用 js 代码绘制图片,由于篇幅有限,这里只分享技术要点,完整版代码可参考 => pages/biases/share.js

获取 canvas 实例

const query = wx.createSelectorQuery()
query.select('#myCanvas')
  .fields({
   
    node: true, size: true })
  .exec(res => {
   
    
    //... 
  })

这段代码是微信小程序中使用 wx.createSelectorQuery 来选取ID为 myCanvas 的元素,并获取其节点信息和尺寸的示例代码。

具体解释如下:

  • const query = wx.createSelectorQuery(): 创建一个选择器查询实例。
  • query.select('#myCanvas'): 通过选择器 #myCanvas 选取ID为 myCanvas 的元素。
  • .fields({ node: true, size: true }):指定要获取的字段,包括节点信息和尺寸信息。
  • .exec(res => { ... }):执行查询操作,并在回调函数中处理查询结果。查询结果会作为参数 res 传递给回调函数。

然后我们可以根据实际需求,在回调函数中对获取的节点信息和尺寸进行处理,例如进行布局调整或其他操作。

其中 res 是一个数组,其中包含了查询结果的信息。

在执行 query.exec() 方法后,查询结果会作为一个数组传递给回调函数。数组的每个元素对应一个查询操作的结果,如果在 query.select() 中指定了多个选择器,那么数组中就会有多个元素。

每个元素都包含了指定字段的查询结果,可以通过索引来访问每个结果。例如,如果只有一个选择器查询的结果,可以通过 res[0] 来访问。

以上示例代码中,res 数组中只有一个元素,即 res[0],该元素包含了 #myCanvas 元素的节点信息和尺寸信息。我们可以通过 res[0].node 来访问节点信息,通过 res[0].widthres[0].height 来访问宽度和高度的尺寸信息。

要注意,如果在 query.select() 中指定了多个选择器,那么数组中会有多个元素,每个元素对应一个选择器的查询结果。你可以根据自己的需求使用循环或条件语句来处理多个查询结果。

继续看代码,我们在 exec 的回调函数中,保存 canvas 和它的尺寸信息,因为后面会用到。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值