1.在小程序中生成分享海报是一个很常见的需求,目前主要有以下两种做法:
2.直接由前端生成,使用小程序提供的canvasAPI
3.由后端知晓云「云函数」生成,前端再获取
4.本文将介绍通过知晓云「云函数」来生成分享海报的功能,并使用webpack和mincloud将代码打包上传到知晓云。
5.技术栈:
6.代码打包工具:webpack@4.22.0
7.部署工具:mincloud@1.0.4
8.图片处理:gm@1.23.1
9.其他:知晓云SDK、imageMagick(云函数内置)
一、项目搭建10.项目文件结构:
gm-draw-image├──index.js├──package.json├──src│└──index.js├──webpack.config.js└──yarn.lock复制代码11.项目搭建与云函数代码打包示例文档基本一致。项目搭建好后,还需要安装以下依赖(两种安装方式选其一即可):
//使用yarn安装yarnaddgmmincloud//使用npm安装npminstall--savegmmincloud复制代码12.修改deploy脚本,如下:
//package.json..."scripts":{"build":"webpack--modeproduction","predeploy":"npmrunbuild","deploy":"minclouddeploygm-draw-image../"},...复制代码最终我们会使用以下两个命令来部署和测试:npmrundeploy//部署到知晓云mincloudinvokegm-draw-image//测试已经部署到知晓云上的云函数复制代码二、生成海报13.这里分为4个步骤:
14.下载海报需要的资源
15.图片/文本处理
16.海报绘制
17.将绘制完成的海报上传到知晓云
18.使用知晓云NodeSDK的request方法将资源下载下来(不能直接使用其他第三方request包):
BaaS.request.get(url).then(res{}).catch(err{})复制代码引入gm库对图片进行处理,云函数沙箱环境已经内置`imageMagick`工具:constgmrequire('gm').subClass({imageMagick:true})复制代码19.在处理文字的时候需要注意,设置字体时需选择知晓云已支持的字体,详见文档文档。
20.另外,这里有一个bug:在同一个图层中,如果填充颜色之前有填充图片操作,那么后续填充的颜色将会不起作用。推荐的做法是如果有需要同时填充图片以及填充颜色,建议将这两个操作分开处理,最后再合成一张图。
21.bug示例如下:
gm(width,height,'none').fill(bg)//填充了一张图片.drawRectangle(`0,0,${width},${height}`).fill('#fff')//字体颜色,这个操作不起作用.fontSize(20).drawText(140,170,'mincloud')复制代码下载图片,图片保存路径需在`/tmp/`路径下:BaaS.request.get(url,{responseType:'arraybuffer'}).then(res{}).catch(err{})复制代码22.上传图片到知晓云:
varMyFilenewBaaS.File()MyFile.upload(img,{filename:'test.png'})复制代码23.完整代码如下:
constfsrequire('fs')constgmrequire('gm').subClass({imageMagick:true})//海报资源constavatarImg'https://cloud-minapp-6.cloud.ifanrusercontent.com/1gQ5Mat7WAwyW1hl.jpg'constbackgroundImg'https://cloud-minapp-6.cloud.ifanrusercontent.com/1gQ7hCpFCK1qw8XQ.jpeg'constMyFilenewBaaS.File()constimageSize{width:375,height:250,}functiondownloadImage(url){constfilename`/tmp/${Math.random().toString().slice(2)}.jpg`constfilefs.createWriteStream(filename)returnBaaS.request.get(url,{responseType:'arraybuffer'}).then(res{file.write(res.data)file.end()returnfilename})}functionuploadImage(buffer){returnMyFile.upload(buffer,{filename:Math.random().toString().slice(2)+'.png'})}functiondrawText(filename){returnnewPromise((resolve,reject){gm(imageSize.width,imageSize.height,'none')//设置字体以及文字大小,这里只能设置云函数已支持的字体.font('/usr/share/fonts/ttf-bitstream-vera/VeraMoBd.ttf').fill('#fff').fontSize(20).drawText(140,170,'mincloud').fill('#fff').fontSize(14).drawText(30,200,'Aneasy-to-useMiniAppdevelopmenttool.').write(filename,function(err){if(err){returnreject(err)}resolve(filename)})})}functiongenAvatar(avatar){returnnewPromise((resolve,reject){gm(avatar).resize(100,100).write(avatar,function(err){if(err){returnreject(err)}resolve(avatar)})})}functiongenBackground(bg){returnnewPromise((resolve,reject){gm(bg).resize(500,350).blur(20,2).write(bg,function(err){if(err){returnreject(err)}resolve(bg)})})}module.exportsfunction(event,callback){const{width,height}imageSizeconstjob1downloadImage(backgroundImg).then(resgenBackground(res))constjob2downloadImage(avatarImg).then(resgenAvatar(res))constjob3drawText('/tmp/textLayer.png')Promise.all([job1,job2,job3]).then(res{gm(width,height,'none').fill(res[0]).drawRectangle(`0,0,${width},${height}`)//绘制背景.fill(res[1]).drawCircle(190,80,190,125)//绘制头像.fill(res[2]).drawRectangle(`0,0,${width},${height}`)//绘制文本.toBuffer('PNG',function(err,buffer){if(err){returncallback(err)}uploadImage(buffer).then((res){console.log('success')callback(null,res.data.file_link)}).catch(err{callback(err)})})})}复制代码三、部署并测试24.跟npm一样,部署前需要先登录,请参照文档配置。
25.使用以下命令即可将云函数部署到知晓云:
npmrundeploy复制代码26.执行结果如下:
27.使用以下的命令来测试:
mincloudinvokeimage-crawler复制代码执行结果如下:28.上传到知晓云的图片如下:
29.生成的海报效果图:
30.素材原图:
四、参考文档31.知晓云开发文档:doc.minapp.com/gm官方文档:aheckmann.github.io/gm/docs.htm…
五、源码32.仓库地址:github.com/ifanrx/gm-d…
实战教程在小程序中快速生成分享海报-小程序自助生成系统-小程序自助开发
浏览量:2419
时间:
来源:weixin_34082177
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。










