在小程序开发中,生成图片是一个常见的需求,比如分享海报、活动邀请函等。下面详细介绍如何在小程序中实现图片生成功能。
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. 兼容性:不同机型可能有表现差异,需要充分测试
通过以上步骤,就可以实现小程序中的图片生成和保存功能。开发者可以根据实际需求,调整绘图内容和样式,创造出更丰富的图片效果。
版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;
工作时间:8:00-18:00
客服电话
0755-88186625
电子邮件
admin@lanyu.com
扫码二维码
获取最新动态