▶_MiniApp Toolkit

wxa-plugin-canvas

工具

微信小程序海报生成组件,通过 JSON 配置快速生成朋友圈分享海报,支持图片、文字、方块、线条等元素的灵活排版与合成。

3,183🕒 最近更新 2026-07
Canvas海报分享图片生成微信小程序

特性

  • JSON 配置驱动的海报渲染引擎
  • 支持图片/文字/方块/线条等元素
  • 二维码自动生成与嵌入
  • 异步海报生成(不阻塞 UI)
  • 自定义像素比(pixelRatio)控制清晰度
  • 图片预下载(preload)避免渲染空白
  • npm 安装 + 微信开发者工具构建
  • 21 个 npm 版本持续迭代

详细文档

wxa-plugin-canvas#

资源概述#

wxa-plugin-canvas 是微信小程序生态中最流行的海报生成组件(3,183 ⭐ / 487 forks / Apache-2.0)。它通过 JSON 配置驱动 Canvas 渲染,让开发者无需手动绘制 Canvas 即可生成精美的朋友圈分享海报——支持图片、文字、矩形块、线条等元素的灵活组合排版。

  • GitHubjasondu/wxa-plugin-canvas(3,183 ⭐ / 487 forks)
  • npmwxa-plugin-canvas@1.1.12(21 个版本)
  • License:Apache-2.0
  • 状态:维护模式(最后提交 2024-05,组件功能稳定完整,社区仍广泛使用)

该组件解决了小程序「生成分享海报」这一高频需求的痛点:原生 Canvas API 绘制海报代码量大、调试困难、容易出错。wxa-plugin-canvas 将海报抽象为 JSON 配置对象,开发者只需描述「在哪里放什么元素」,组件自动完成 Canvas 绘制和图片导出。

设计规范#

组件架构#

组件采用「声明式配置 + 命令式调用」模式:

  • 声明式:通过 posterConfig 对象描述海报布局(尺寸、背景、元素列表)
  • 命令式:通过组件实例方法 this.create() 异步触发渲染

配置结构#

code
posterConfig = {
  width: 750,          // 画布宽度(rpx)
  height: 1200,        // 画布高度(rpx)
  backgroundColor: '#fff',
  debug: false,        // true 时显示 Canvas 调试
  pixelRatio: 2,       // 像素比,越大越清晰
  preload: true,       // 预下载图片
  blocks: [...],       // 矩形块(背景、圆角、阴影)
  texts: [...],        // 文字(字体、颜色、行高、对齐)
  images: [...],       // 图片(URL、裁剪、圆角)
  lines: [...]         // 线条
}

元素层级#

渲染顺序为 blocks → images → texts → lines(按数组顺序绘制,后绘制的在上层)。

审核规范#

作为工具组件本身无需审核。使用该组件的小程序需注意:

  • downloadFile 域名:海报中引用的图片 URL 必须添加到小程序后台的 downloadFile 合法域名列表
  • 图片版权:确保海报中使用的图片、字体、素材拥有合法授权
  • 内容合规:生成的海报内容需符合小程序内容审核规范

开发指南#

快速上手#

1. 安装

code
npm i wxa-plugin-canvas -S --production

在微信开发者工具中:工具 → 构建 npm。

2. 页面 JSON 注册组件

code
{
  "usingComponents": {
    "poster": "wxa-plugin-canvas/poster"
  }
}

3. WXML 使用组件

code
<poster id="poster" config="{{posterConfig}}" bind:success="onPosterSuccess" bind:fail="onPosterFail">
  <button>点击生成海报</button>
</poster>

4. JS 配置海报

code
Page({
  data: {
    posterConfig: {
      width: 750,
      height: 1200,
      backgroundColor: '#fff',
      debug: false,
      images: [
        {
          x: 30,
          y: 30,
          width: 690,
          height: 400,
          url: 'https://example.com/cover.jpg'
        }
      ],
      texts: [
        {
          x: 30,
          y: 460,
          baseLine: 'top',
          text: '标题文字',
          fontSize: 36,
          color: '#333',
          lineHeight: 50
        }
      ],
      blocks: [
        {
          x: 30,
          y: 600,
          width: 690,
          height: 80,
          backgroundColor: '#f5f5f5',
          borderRadius: 8
        }
      ]
    }
  },
  onPosterSuccess(e) {
    const { errMsg, path } = e.detail
    console.log('海报生成成功:', path)
    // path 为生成的临时图片路径
  },
  onPosterFail(e) {
    console.error('海报生成失败:', e.detail)
  }
})

异步生成海报#

code
// 获取组件实例后调用 create 方法
onGeneratePoster() {
  const poster = this.selectComponent('#poster')
  poster.create(this.data.posterConfig)
}

常见陷阱#

  1. 图片域名未配置:忘记将图片 URL 域名添加到 downloadFile 合法域名,导致图片加载失败、海报空白。
  2. 异步生成时缺少 id:使用 this.selectComponent('#poster') 必须确保组件设置了 id="poster"
  3. rpx 单位:配置中坐标和尺寸均使用 rpx,不是 px。开发者需按 750rpx = 屏幕宽度换算。
  4. 图片跨域:小程序 Canvas 不支持跨域图片,必须通过 downloadFile 下载到本地后再绘制。
  5. 文字换行:text 元素需设置 lineHeightwidth 才能自动换行,否则文字溢出。
  6. Canvas 版本:组件使用旧版 Canvas API(canvas-id),如需使用新版 Canvas 2D(type="2d")需自行适配。

生态资源#

推荐框架#

  • 原生微信小程序(首选,组件为原生设计)
  • Taro / uni-app:可通过组件引用方式适配,但需处理小程序原生组件在跨端框架中的使用方式

相关工具#

  • mp-html:富文本渲染组件,与 wxa-plugin-canvas 配合可在海报中渲染 HTML 内容
  • miniprogram-ci:CI/CD 工具,可用于自动化测试海报生成结果

社区资源#

版本更新#

  • v1.1.12(当前最新):稳定版本,功能完整
  • 更新历史:共发布 21 个 npm 版本,从 v0.x 迭代到 v1.1.x
  • 最后提交:2024-05-08(功能稳定后停止频繁更新)
  • 状态:维护模式——组件功能已覆盖海报生成的核心需求(图片/文字/方块/线条/二维码),社区仍有大量活跃用户
  • 替代方案:如需更现代的方案,可考虑基于新版 Canvas 2D API(type="2d")自行封装或使用 wxml-to-canvas 等新工具
  • 最后核实:2026-07-23

支持平台