小程序应用 canvas 给图片增加水印
操作 canvas
相干的 api 应用的是微信最新提供的 (一路过去踩了好多坑...)
浅用微信小程序 canvas 给图片增加简略水印, 废话不多说, 先上成果, 后看代码 (uniapp等框架写法大同小异)
效果图
代码局部 (没有细分拆开来讲, 但大部分代码都加解释正文了)
WXML
<view class="container"> <button bindtap="chooseImages">抉择图片</button> <view> <image src="{{imgsrc}}" mode="aspectFit" bindtap="prevImage"></image> </view></view><canvas style="position:fixed;top: 0;left: -100%" type="2d" id="Canvas"></canvas>
JavaScript
Page({ data: { imgsrc: '', canvas: null, ctx: null, }, // 在页面首次渲染实现生命周期获取操作canvas的上下文对象 onReady() { const query = wx.createSelectorQuery() query.select('#Canvas') .fields({ node: true, size: true }) .exec((res) => { const canvas = res[0].node const ctx = canvas.getContext('2d') this.setData({ canvas, ctx }) }) }, // 抉择图片 async chooseImages() { const res = await wx.chooseImage({}) const addWatermarkRes = await this.addWatermark(res.tempFilePaths[0]) }, // 增加水印办法 (传入图片地址) addWatermark(tempFilePath) { return new Promise( async (resolve, reject) => { // 获取图片信息 const imgInfo = await wx.getImageInfo({ src: tempFilePath }) // 设置canvas宽高 this.data.canvas.width = imgInfo.width this.data.canvas.height = imgInfo.height // 创立一个图片对象 const image = this.data.canvas.createImage(); image.src = tempFilePath; image.onload = () => { // 将图片绘制到canvas上 this.data.ctx.drawImage(image, 0, 0, imgInfo.width, imgInfo.height) // 设置文字字号及字体 this.data.ctx.font = '32px sans-serif' // 设置画笔色彩 this.data.ctx.fillStyle = 'rgba(0,0,0,0.3)'; // 绘制矩形 this.data.ctx.fillRect(0, imgInfo.height - 40, 420, 40) // 设置画笔色彩 this.data.ctx.fillStyle = '#ffffff'; // 填入文字 this.data.ctx.fillText('品名: 巨无霸汉堡; 单价: 20元', 0, imgInfo.height - 10) // 将canvas转为为图片 wx.canvasToTempFilePath({ canvas: this.data.canvas, success: (res) => { this.setData({ imgsrc: res.tempFilePath}) resolve(res.tempFilePath) }, }) } }) }, // 预览图片 prevImage(){ wx.previewImage({ current: this.data.imgsrc, // 以后显示图片的http链接 urls: [this.data.imgsrc] // 须要预览的图片http链接列表 }) }})
有问题能够评论区或者私信探讨哈