【小程序】canvas生成海报图以及一些canvas的小技巧

做项目的时候,经常会遇到类似于将指定页面生成为海报的功能。在移动端或者pc端的网页中,可以用html2canvas 这个js插件解决。但是在小程序中,就没有那么简单了。
简单的说,html2canvas 是一个操作dom的插件,但是小程序中并没有插件,所以并不能如此简单的生成海报。所幸,小程序中有一个 wx.canvasToTempFilePath 这个方法,就能生成一张jpg或者png的图啦。

首先,要在wxml文件中写下列代码。

 <view style="width:0;height:0;overflow:hidden">
            <canvas canvas-id="myCanvas" hidden="{{canvasHidden}}" style="width:{{imgWidth}}px;height:{{imgHeight}}px"></canvas>
  </view>

这个画图生成海报的时候,有一个特别烦的地方。那就是我在画图的时候,很想隐藏掉canvas,但是我隐藏掉的话呢,它就画不出来了。这就想当的烦人了。也不知道后来在哪里看到一个方法,在外面包裹一层view,然后hidden掉就行了。试用了一下好像也没太大的bug,那就将就着用吧

写好wxml后,就可以开始画海报了。一般海报都有一张默认的背景图,可以直接放在本地。然后:

//首先,声明canvas
 var ctx = wx.createCanvasContext('myCanvas');
 //在这里,我说一下。我每次生成的海报图,都是按照指定的大小生成的图片。这样生成的图片,在每个手机上显示都都一样大。实际上我认为这是一个偷懒的办法。正确办法应该是计算分辨率什么的。
 ctx.drawImage(imgUrl,0,0,imgUrl.width,imgUrl.height);//画背景图
//然后画头像或者二维码等网上链接
//1.首先下载图片。
wx.getImageInfo({
    src: bgImg,
    success: function(res) {
    var path = res.path;//这是得到文件的临时路径
    //然后将图片画在背景图上
    ctx.draw(path,0,0,100,100);
    }
})
//在后续的生成图片文件的操作中,这一步下载图片是必不可少的,也可以用另一个下载文件的方法来得到临时路径。这里还要记住把文件的url绑定在后台的download那里面。不绑定是下载不了图片的。

//画文字,首先,设置文字的字体,大小,正邪等等
ctx.font = "normal bold 50px 黑体" ;//这个方法,非得写的话,我建议写完。第一个值是字体样式,仅支持 italic, oblique, normal,第二个是粗细,仅支持 normal, bold,第三个是大小,第四个是字体名称。只能用都支持的字体,实际上也没几个字体可用

ctx.fillText("开心", 405, 630);
//这就是画字体了

//假如现在海报已经画完了以后,就需要输出图片了。就可以用到我上面所说的那个方法。但是,由于小程序的执行顺序,建议画了画以后,延迟一会儿再生成图片
ctx.draw(false, setTimeout(function() {
            wx.canvasToTempFilePath({
                canvasId: 'myCanvas',
                destWidth: imgWidth,//屏幕狂傲
                destHeight: imgHeight,
                fileType: "png",//文件格式,支持png和jpg
                success: function(res) {
                //这就是生成的文件临时路径
                    var tempFilePath = res.tempFilePath;

                },
                fail: function(res) {
                    console.log(res);
                }
            })
        }, 1000))

到这里,最简单的画海报的方法就完成了。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌村村花杨小花

谢谢大佬!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值