小程序新版canvas给图片添加水印的方法,可以预览、循环给多张图片添加,尽可能使用async await的写法保持同步。

140 阅读1分钟
前端新入职小菜鸡一枚,最近遇到一个给小程序里选中的图片添加水印的需求,网上找了一圈实现倒是实现了,但是因为异步的问题在循环添加水印的时候会出现各种各样的问题;包括不限于图片不加载、图片拉伸异常等等等问题,于是乎自己看微信开发者文档发现CANVAS已经进行一轮更新,几番折腾之下,大概实现了小程序新版canvas添加水印的方法,尽可能使用async await的写法保持同步。
  • 大体思路就是在页面中放一个画布,type貌似是必须的,然后再设置一个类以便被我们获取;如果不想在页面中显示画布可以用position:fixed left:100%让它不要在页面内。

  • 然后使用 wx.createSelectorQuery().select('.canvas')获取到画布节点,在exec里获取图片的宽高、canvas实例、渲染上下文;将canvas的宽高设置为图片一致。

  • 生成一个image对象,drawImage需要用到,图片加载完后就可以开始drawImage了,设置字体、大小、内容等等;

  • 最后调用canvasToTempFilePath方法保留在本地

  • 代码贴在下边,实现的方式可能还是不够优雅