微信小程序生成海报 / 两张图片合并生成一张

一张背景图,一个二维码,生成一张全屏海报,二维码位于右下角(二维码位置可以调整)

方法思路:使用微信小程序的canvas组件

1、获取canvas组件定义一个canvas上下文
2、获取设备信息,将设备宽高设置为canvas画布的大小
3、在图片加载完成后开始绘制,可以调整绘制图片的起始位置坐标以及大小
4、绘制完成后将canvas转成图片
5、下载到图库
javascript 复制代码
<canvas type="2d" id="myCanvas"></canvas>
javascript 复制代码
handleImg() {
    try {
      const query = wx.createSelectorQuery();
      query.select('#myCanvas')
      .fields({
        node: true,
        size: true
      })
      .exec((res) => {
        const canvas = res[0].node;
        const ctx = canvas.getContext('2d');
        const systemInfo = wx.getSystemInfoSync();
        const dpr = systemInfo.pixelRatio;
        const { windowWidth, windowHeight } = systemInfo
        // 根据设备的像素比 把画布设为全屏
        canvas.width = windowWidth * dpr;
        canvas.height = windowHeight * dpr;
        ctx.scale(dpr, dpr)
        let that = this
        const img = canvas.createImage();
        img.src = '第一张图片的url';
        img.onload = () => {
          const qrcodeImg = canvas.createImage();
          qrcodeImg.src = '第二张图片的url'
          qrcodeImg.onload = () => {
          	// 绘制第一张图片
            ctx.drawImage(img, 0, 0, windowWidth, windowHeight);
            // 绘制第二张图片
            ctx.drawImage(qrcodeImg, windowWidth - 100, windowHeight - 100, 60, 60);
            // 延时保存图片
            setTimeout(() => {
              wx.canvasToTempFilePath({
                canvas,
                destWidth: windowWidth * dpr,
                destHeight: windowHeight * dpr,
                success(res) {
                  console.log('生成的图片路径:', res.tempFilePath);
                  that.saveImageToAlbum(res.tempFilePath)
                },
                fail(err) {
                  console.error('canvasToTempFilePath 保存失败:', err);
              });
            }, 500);
          }
        };
      });
    } catch (err) {
      console.log('trycatch失败',err)
    }
  },
  saveImageToAlbum(filePath) {
    wx.saveImageToPhotosAlbum({
      filePath: filePath,
      success(res) {
        wx.showToast({
          title: '保存成功',
          icon: 'success',
          duration: 2000
        });
      },
      fail(err) {
        console.error('保存失败:', err);
      }
    });
  },

注意:

  • 等图片加载完成后开始绘制
  • 绘制完成后稍加延迟再转成图片

把图片链接准备好替换代码中的占位文字即可运行

有问题欢迎留言交流~

相关推荐
LT10157974446 小时前
2026年在线兼容性测试工具推荐|零部署网页 / APP / 小程序实测对比
测试工具·小程序
码农客栈8 小时前
小程序学习(二十八)之“订单列表”
小程序
这是个栗子14 小时前
uni-app 微信小程序开发:常用事件指令(@xxx)(一)
微信小程序·小程序·uni-app
2601_962344621 天前
计算机毕业设计之基于大数据的投保数据的分析系统的设计与实现
大数据·人工智能·深度学习·机器学习·信息可视化·小程序·课程设计
黑黑的独立开发笔记1 天前
「 简记往来」第十五篇:小程序性能优化——首屏从2.5秒到1.2秒
性能优化·小程序·首屏优化·分包加载·setdata·简记往来
m0_5261194018 天前
iconfont我修改好颜色,但是在小程序项目是黑色的
小程序
2601_9567436818 天前
2026 上海小程序开发甄选:源码、云函数、跨端兼容技术评判
小程序·开发经验·上海
IT_张三18 天前
CSDN-项目分享-暑期备考小程序
小程序
IsJunJianXin18 天前
pdd小程序 cdp 保存响应体
linux·服务器·小程序·pdd小程序·拼多多响应体解密·小程序cdp·拼多多rpc取响应体
Geek_Vison19 天前
APP瘦身实战:从80MB+砍到15MB——基于小程序容器技术剥离APP非核心业务的实践分享
小程序·uni-app·mpaas