前端新入职小菜鸡一枚,最近遇到一个给小程序里选中的图片添加水印的需求,网上找了一圈实现倒是实现了,但是因为异步的问题在循环添加水印的时候会出现各种各样的问题;包括不限于图片不加载、图片拉伸异常等等等问题,于是乎自己看微信开发者文档发现CANVAS已经进行一轮更新,几番折腾之下,大概实现了小程序新版canvas添加水印的方法,尽可能使用async await的写法保持同步。
-
大体思路就是在页面中放一个画布,type貌似是必须的,然后再设置一个类以便被我们获取;如果不想在页面中显示画布可以用position:fixed left:100%让它不要在页面内。
-
然后使用 wx.createSelectorQuery().select('.canvas')获取到画布节点,在exec里获取图片的宽高、canvas实例、渲染上下文;将canvas的宽高设置为图片一致。
-
生成一个image对象,drawImage需要用到,图片加载完后就可以开始drawImage了,设置字体、大小、内容等等;
-
最后调用canvasToTempFilePath方法保留在本地
-
代码贴在下边,实现的方式可能还是不够优雅
-