经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
教你制作挂件头像 | 小程序七十二变之 canvas 绘制国旗头像
来源:cnblogs  作者:我是玖柒后  时间:2019/9/26 9:04:12  对本文有异议

昨天朋友圈被「请给我一面国旗@微信官方」刷屏,虽然知道是假的,但是从另一个角度来看,弄清楚如何实现更有趣。

1、canvas

这就不得不提到小程序中的 API canvas,H5 中也是有 canvas 的,不过之前也一直没有机会用,这次正好乘机试试水。

晚上回家看了下官方文档,网上搜了一些类似的功能实现,最后写好了一个 demo,基本上是能初步绘制国旗头像了。

当然以后如果想要绘制其他带挂件的头像,只需要更改挂件素材即可,提前预约帮你们定做今年的圣诞帽。

 

2、代码来了

实现过程主要分为以下几个步骤:

1、新建 canvas 画板

2、绘制头像当做背景(demo 目前是自行上传头像制作)

3、绘制国旗边框

4、保存到手机相册(需授权)

废话不多说,直接上代码:

  1. // wxml 页面
  2. <view class="container">
  3. <!-- 头像绘制区域 -->
  4. <canvas canvas-id="myAvatar" class="canvas"></canvas>
  5.  
  6. <!-- 按钮 -->
  7. <button class="btn-save" bindtap="upload">上传头像</button>
  8. <button disabled="{{ !save }}" class="btn-save" bindtap="saveImg">保存到相册</button>
  9. </view>
  1. // 部分功能 js
  2. // 绘制头像背景
  3. drawAvatar() {
  4. var that = this;
  5. var p = that.data;
  6. context = wx.createCanvasContext('myAvatar', this);
  7. context.drawImage(p.src, 0, 0, 256, 256);
  8. context.draw(true)
  9. context.save();
  10. context.translate(p.hat.x, p.hat.y)
  11. context.scale(p.hat.b, p.hat.b)
  12. context.rotate(p.hat.rotate * Math.PI / 180)
  13. context.drawImage(p.hat.url, 0, 0, p.hat.w, p.hat.h)
  14. context.draw(true)
  15. this.setData({
  16. save: true
  17. })
  18. },
  19. // 保存图片
  20. saveImg() {
  21. wx.canvasToTempFilePath({
  22. canvasId: 'myAvatar',
  23. success(res) {
  24. wx.saveImageToPhotosAlbum({
  25. filePath: res.tempFilePath,
  26. success(res) {
  27. wx.showToast({
  28. title: '保存成功'
  29. })
  30. },
  31. fail(res) {
  32. wx.showToast({
  33. title: '取消保存...',
  34. icon: 'none'
  35. })
  36. }
  37. })
  38. }
  39. })
  40. }

 

3、最后

demo 写完了,以小程序的尿性,怎么会没有坑呢?发现真相的我眼泪差点掉下来,而且这个坑不是一般的坑,弄了老半天都没解决。

具体是啥坑小程序留言区揭晓,感兴趣的欢迎来留言讨论如何解决,到发文为止依旧是个巨坑。

公众号「我是玖柒后」后台回复「头像」即可获取 demo 源码,填坑不忘挖坑人,我太南了。

 

 

 

 

推荐文章:

小程序九九八十一坑之跳转传参

原文链接:http://www.cnblogs.com/msunh/p/11587120.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号