小程序
小游戏
企业微信
微信支付
扫描小程序码分享
我想在上传图片时,给图片加上水印。目前的方法是本地上传图片,获取图片数组。然后循环这个数组,利用canvas给每张图片加上水印。最后获得加上水印的图片数组。
但是在循环时发现ctx.draw()方法只执行一次。是什么情况
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
你不亮代码,鬼知道什么情况。
提醒下,draw的并发性能很差,最好是一张一张递归来执行,打完一张水印再打另一张。
然后可以用新的canvas 2D接口,ctx.drawImage,老接口不再维护了。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
你不亮代码,鬼知道什么情况。
提醒下,draw的并发性能很差,最好是一张一张递归来执行,打完一张水印再打另一张。
然后可以用新的canvas 2D接口,ctx.drawImage,老接口不再维护了。
return new Promise((resolve, reject) => {
res.map((item)=>{
uni.getImageInfo({
src: item,
success: (ress) => {
this.nowTime = formatDate(new Date())
let ctx = uni.createCanvasContext('firstCanvas');
let width = ress.width;
let height = ress.height;
let ratio = width/height;
let screenWidth = uni.getSystemInfoSync().windowWidth;
let screenHeight = uni.getSystemInfoSync().windowHeight;
if(ratio>=1){
width = width>screenWidth ? screenWidth : width;
height = parseInt(width/ratio)
}else{
height = height>screenHeight ? screenHeight : height;
width = parseInt(height*ratio)
}
that.canvasWidth = width;
that.canvasHeight = height;
//将图片src放到cancas内,宽高为图片大小
ctx.drawImage(item, 0, 0, width, height)
//将声明的时间放入canvas
ctx.setFontSize(12) //注意:设置文字大小必须放在填充文字之前,否则不生效
//设置字体颜色
ctx.setFillStyle('#fa436a')
ctx.fillText(`员工:${this.userInfo.user}`, 10, 20);
ctx.fillText(`时间:${this.nowTime}`, 10, 40);
console.log('canvas循环前');
console.log(ctx);
ctx.draw(false, function() {
debugger;
console.log('获取循环路径');
uni.canvasToTempFilePath({
canvasId: 'firstCanvas',
success: (resss) => {
that.imgRmarkList.push(resss.tempFilePath);
},
fail: (e) => {
reject(e);
console.log(e)
}
})
})
}
})
resolve(that.imgRmarkList);
})
})
})