微信小程序,调用手机相册,或者相机拍摄,然后拿到临时图片。再用canvas给图片添加一个当前时间的水印。最后本地预览,同时上传服务器。
但是在开发者工具里面,和安卓手机上,都完全没问题。但是在苹果手机上,就不行了。请帮忙看什么问题。谢。有酬劳
打印data.path的结果是:(两次打印,临时路径的 前缀 不一样)
安卓版本:"http://tmp/tOln3OeToOQOb7131f7b99e0f4924532d03b3bf68b15.png"。
ios版本 的是:path: "wxfile://tmp_99348563a6d7ae65d2c1bf5baf94af1e.jpg"
ios版本真机调试打印结果
安卓和开发工具调试打印的结果
const data = this.data.photoData
console.log('组件里面的 图片data', data);
const width = data.width
const height = data.height
const time = util.nowdate('time');
this.setData({
canvasWidthValue: width,
canvasHeightValue: height,
})
this.createSelectorQuery()
.select('#myCanvas') // 在 WXML 中填入的 id
.fields({ node: true, size: true })
.exec((res) => {
const canvas = res[0].node
const ctx = canvas.getContext('2d')
canvas.width = width
canvas.height = height
console.log('Canvas 对象 res', res);
wx.getImageInfo({
src: data.path, // 图片的路径
success: (res) => {
console.log('图片加载完成res',res);
const image = canvas.createImage();
console.log('创建image',image);
image.src = res.path; // 使用本地路径加载
image.onload = () => {
ctx.drawImage(image, 0, 0, width, height)
ctx.font = '30px Arial'; // 这里设置字体大小为30px,字体为Arial
const textWidth = ctx.measureText(time).width + 40;
const canvasWidth = canvas.width;
const canvasHeight = canvas.height;
ctx.fillStyle = 'rgba(0, 0, 0, 0.5)'; // 设置背景颜色为半透明的黑色
const x = canvasWidth - textWidth;
const y = canvasHeight - 60;
ctx.fillRect(x, y, textWidth, 80);
ctx.fillStyle = 'rgba(255, 255, 255, 0.7)'; // 设置字体颜色为白色
// 计算文本的起始坐标,使其位于背景的中心
const textX = x + (textWidth - ctx.measureText(time).width) / 2;
const textY = y + 40; // 假设行高为字体大小
ctx.fillText(time, textX, textY); // 绘制文本
wx.canvasToTempFilePath({
canvas,
x: 0,
y: 0,
width: canvasWidth,
height: canvasHeight,
success: res => {
// 生成的图片临时文件路径
const tempFilePath = res.tempFilePath
console.log('生成的图片临时文件路径 tempFilePath:', tempFilePath);
this.setData({
watermarkedImage: tempFilePath
})
},
fail: err => {
console.log('err', err);
}
})
}
image.onerror = (err) => {
console.error('图片加载失败', err);
};
},
fail: (err) => {
console.error('获取图片信息失败', err);
}
});
})