addPic: function () { let that = this; wx.chooseImage({ count: 1, sizeType: ['original'], success: function(res) { var filePath = res.tempFilePaths[0]; wx.getFileSystemManager().readFile({ filePath: filePath, success: function(res) { wx.cloud .callFunction({ name: "checkImageSec", data: { //使用wx.cloud.CDN避免传输的图片过大 imgData: wx.cloud.CDN({ type: "filePath", filePath: filePath, }), }, }) .then((res) => { if (res.result.errCode === 87014) { wx.showToast({ title: "图片可能违规,请仔细检查后再试!", icon: "none", duration: 5000, }); } else { wx.showToast({ title: "图片检测通过", icon: "none", duration: 1000, }) } }); } }) } }) },这段函数中var filePath = res.tempFilePaths[0];图片可能超过1M会导致云函数报错,所以需要对图片进行压缩在上传云函数,怎么这个函数中添加图片压缩这个功能
时间: 2024-01-15 10:02:55 浏览: 91
可以使用第三方库node-image-resizer来实现图片压缩功能。首先需要安装node-image-resizer,在云函数中引入该库:
```
const imageResizer = require('image-resizer');
```
然后在success回调函数中添加图片压缩代码:
```
wx.getFileSystemManager().readFile({
filePath: filePath,
success: function(res) {
imageResizer(res.data, {
width: 800, // 设置压缩后的宽度
quality: 80 // 设置压缩质量,值越大质量越高
}, function(err, buffer, image) {
if (err) {
console.error(err);
return;
}
wx.cloud.callFunction({
name: "checkImageSec",
data: {
imgData: wx.cloud.CDN({
type: "fileBuffer",
buffer: buffer,
}),
},
}).then((res) => {
if (res.result.errCode === 87014) {
wx.showToast({
title: "图片可能违规,请仔细检查后再试!",
icon: "none",
duration: 5000,
});
} else {
wx.showToast({
title: "图片检测通过",
icon: "none",
duration: 1000,
})
}
});
});
}
})
```
在这个代码中,我们使用了image-resizer库来压缩图片,并将压缩后的图片以buffer形式传递给云函数。注意,使用buffer传递图片时,需要将wx.cloud.CDN的type设置为"fileBuffer"。
阅读全文