给你的头像加个圣诞帽吧

看着大伙都在弄这个,我自己也来试一哈,我分别用了两种方式来实现,一种是普通的方式,一种是wxs方式

普通方式

效果图如下:

思路

  • 获取头像
  • 选择素材
  • 缩放,移动,旋转素材
  • 生成canvas
  • 生成图片,保存图片

实现方式

首先是获取头像,这个不用说,大家应该都会的。

选择素材这里我准备了三张圣诞帽的素材,这个网上有很多,可以自己找下,然后我还做了一个选择手机相册的功能,如果你自己有素材的话也可以直接选择这个功能。

缩放,移动,旋转素材都是通过触摸函数去实现的,这里是先将布局做好,然后在标签上面绑定各个触摸事件,通过返回的值在标签的style里设置实现各个效果。

调整好了之后点击保存头像会获取所有参数并将头像画出来,再通过 wx.canvasToTempFilePath() 将canvas生成图片最后通过 wx.saveImageToPhotosAlbum() 保存图片。

主要代码

主要的函数就是下面这几个,代码片段我会放在文末,没有什么比较难的地方,就是要注意下计算的时候不要算错就行。

需要注意的点

由于素材的大小可能会有不同,所以在重新选择素材的时候高度要重新设置一下,这里我用了一个方法来重置高度,主要是每次重新选择素材的时候就用 wx.getImageInfo() 这个api去获取图片素材的宽高,再计算出宽高比。

wxs实现方式

实现方式

思路跟普通方式是一样的,不同的是这里将绑定事件通过 wxs 去实现,直接设置标签的参数而不通过逻辑层去处理,在性能上会比较好一点,不过这种实现方式在进行旋转的时候最后生成的图片会有不准,后面会说到。

参数的获取是通过在标签上设置style,然后点击保存的时候用 wx.createSelectorQuery() 获取各个参数的

获取旋转的值

由于 wx.createSelectorQuery() 并不能获取到 rotate 这个参数,所以我是通过下面这种方式来拿到旋转的值的,将旋转值以宽度的形式赋值给 .vo-ro

但是我发现旋转之后生成的图片不是正确的,原因是旋转之后通过 wx.createSelectorQuery() 拿到的宽高并不是图片大小的宽高,而是旋转之后的宽高,按理来说不应该是这样的,即使通过样式旋转,它的宽高应该保持不变才对,这样就造成了参数上的错误,所以画出来的图片是不准确的。

因为加了旋转之后画出来的图片会不准确,暂时想不出别的方法,我把旋转的按钮先注释掉了,只支持缩放跟拖拽。

总结

两种方式,wxs性能要更好,但是效果没第一种的好,看你要哪种了,最后祝大家圣诞节快乐,祝你生活愉快

developers.weixin.qq.com/s/Cizd1RmY7…

相关文章

概述 消息能力是小程序能力中的重要组成,我们为开发者提供了...
判断H5页面环境在微信中还是小程序中 用小程序提供的wx.mini...
wx.reLaunch和wx.navigateTo,wx.navigateTo的区别 2019-03-...
微信小程序如何从数组里取值_微信小程序 传值取值的几种方法...
H5项目接入微信授权登录,通过 UA 区分微信还是普通浏览器:...
微信小程序获取data-xx=""属性的值,自定...