首页/八方信息/正文
微信小程序生成图片代码详解:含背景图、文字及小程序码等操作

 2025年09月03日  阅读 4

摘要:在小程序开发中,生成图片是一个常见的需求,比如分享海报、活动邀请函等。下面详细介绍如何在小程序中实现图片生成功能。1.添加画布组件首先需要在wxml文件中添加canvas组件,这是绘图的基础。设置好画布的宽高和id,以便后续通过js代码操作。示例代码如下...

在小程序开发中,生成图片是一个常见的需求,比如分享海报、活动邀请函等。下面详细介绍如何在小程序中实现图片生成功能。

1. 添加画布组件

首先需要在wxml文件中添加canvas组件,这是绘图的基础。设置好画布的宽高和id,以便后续通过js代码操作。示例代码如下:


<canvas canvas-id="myCanvas" style="width:300px; height:500px"></canvas>



  

2. 绘制基础内容

绘制操作主要分为三部分:

绘制背景图:可以是纯色背景或图片背景

const util = require('../../utils/util.js')

绘制文字内容:包括标题、用户名等信息

绘制小程序码:用于用户扫码访问

//util.js
var Promise = require('../components/bluebird.min.js')

module.exports = {
promisify: api => {
return (options,...params) => {
return new Promise((resolve,reject) => {
const extras = {
success: resolve,fail: reject
}
api({ ...options,...extras },...params)
})
}
}
}

3. 使用第三方库

对于复杂的绘图需求,可以使用第三方库如min.js来简化操作。这个库封装了常用的绘图方法,可以更方便地实现文字换行、图片缩放等功能。

4. 生成临时图片

绘图完成后,需要将canvas内容转换为图片。使用wx.canvasToTempFilePath API可以将canvas内容保存为临时图片文件:


wx.canvasToTempFilePath({
  canvasId: 'myCanvas',
  success(res) {
    // 获取到临时文件路径
    this.tempFilePath = res.tempFilePath
  }
})

//获取手机宽高
wx.getSystemInfo({
success: function (res) {
wc.put('phoneInfo',res)
}
});

var windowHeight = phoneInfo.windowHeight,windowWidth = phoneInfo.windowWidth
self.setData({
windowHeight: windowHeight,windowWidth: windowWidth
})

//在这代码中,我们通过使用wx.getimageInfo这个API来下载一个网络图片到本地(并可获取图片的尺寸等其他信息),然后调用ctx.drawImage方法图片绘制到画布上,填满画布。

const wxGetimageInfo = util.promisify(wx.getimageInfo)
//绘制二维码
Promise.all([
//背景图
wxGetimageInfo({
src: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1536213812443&di=753a0a49acfd390fba9fd7884daafa5c&imgtype=0&src=http%3A%2F%2Fi5.hexunimg.cn%2F2016-08-10%2F185422031.jpg';
}),//二维码
wxGetimageInfo({
src: 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1898297765,3486952215&fm=26&gp=0.jpg';
})
]).then(res => {
console.log(res)
if (res[0].errMsg == "getimageInfo:ok" && res[1].errMsg == "getimageInfo:ok"){
const ctx = wx.createCanvasContext('shareCanvas')

    // 底图
    ctx.drawImage(res[0].path,windowWidth,windowHeight)
    //写入文字
    ctx.setTextAlign('center')    // 文字居中
    ctx.setFillStyle('#f3a721')  // 文字颜色:黑色
    ctx.setFontSize(22)         // 文字字号:22px
    ctx.fillText("作者:墜夢—Eric",windowWidth / 2,windowHeight / 2)
    // 小程序码
    const qrImgSize = 150
    ctx.drawImage(res[1].path,(windowWidth - qrImgSize) / 2,windowHeight / 1.8,qrImgSize,qrImgSize)
    ctx.stroke()
    ctx.draw()
  }else{
    wx.showToast({
      title: '邀请卡绘制失败!',image:'../../asset/images/warning.png'
    })
  }

5. 保存到相册

有了临时图片文件后,就可以调用wx.saveImageToPhotosAlbum API将其保存到系统相册:


wx.saveImageToPhotosAlbum({
  filePath: this.tempFilePath,
  success() {
    wx.showToast({
      title: '保存成功',
    })
  }
})

注意事项:

1. 权限处理:在保存到相册前需要获取用户授权,可以使用wx.authorize提前请求权限

2. 错误处理:要添加fail回调处理可能的错误情况

3. 性能优化:大尺寸画布可能会影响性能,建议合理设置画布尺寸

4. 兼容性:不同机型可能有表现差异,需要充分测试

通过以上步骤,就可以实现小程序中的图片生成和保存功能。开发者可以根据实际需求,调整绘图内容和样式,创造出更丰富的图片效果。

版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;

原文链接:http://wen.bjhwtx.com/post/37712.html

标签:

博览广文网

博览广文网为所有文学爱好者、新闻爱好者、关注生活多方面内容的观众朋友提供多方位的内容呈现、提升阅读空间、填充碎片时间,开阔读者的视野、增长见识、了解民生、一个让您不出户尽知天下事的网站平台!
热门标签
关于我们
广文舒阅网—让天下读者有家可归!这里汇聚了各类优质文化信息,无论是全球热点、历史故事,还是实用百科、趣味探索,您都能轻松获取。我们希望用阅读点亮您的世界,让每一次浏览都充满收获和乐趣。
导航栏A标题
广文舒阅网
扫码关注
联系方式
全国服务热线:0755-88186625
Q Q:8705332
Email:admin@lanyu.com
地址:深圳市福田区海雅缤纷国际大厦5层501
Copyright 深圳市蓝宇科技有限公司 版权所有 备案号:京ICP备20013102号-1