压缩图片主要是保证图片清晰度的同时减少图片的体积,在这里我采用的方法是对图片的长宽进行等比缩放。
效果如图,缩放后清晰度有所降低但整体效果达到了需求

VeryCapture_20251017152250.gif
如果图片不够小还可以在以下基础上写递归压缩到想要的尺寸
/**
* 压缩图片
* @param {String} url 网络图片地址
* @param {Number} ratio 压缩比例, 默认50%
* @param {String} which 上传到库的哪个文件夹
* @returns
*/
const compressTheImage = function (url, ratio = 0.5, which) {
return new Promise(async (resolve, reject) => {
// 获取图片信息
let result = await uni.getImageInfo({ src: url })
console.log(result, "result-------")
if (result[0]) {
return reject({ error: "获取图片信息异常:" + result[0].errMsg })
}
let width = result[1].width
let height = result[1].height
// 下载图片文件
let downloadFileRes = await uni.downloadFile({ url })
console.log(downloadFileRes, "downloadFileRes------")
if (downloadFileRes[0]) {
return reject({ error: "下载图片文件异常:" + downloadFileRes[0].errMsg })
}
// 压缩图片
let compressImageRes = await uni.compressImage({
src: downloadFileRes[1].tempFilePath,
compressedWidth: JSON.stringify(width * ratio),
compressedHeight: JSON.stringify(height * ratio),
})
console.log(compressImageRes, "compressImageRes------")
if (compressImageRes[0]) {
return reject({ error: "压缩图片异常:" + compressImageRes[0].errMsg })
}
let sizeInfo = await uni.getFileInfo({
filePath: compressImageRes[1].tempFilePath,
})
console.log(sizeInfo[1].size, '-----');
let img = await uploadFiles(compressImageRes[1].tempFilePath, which)
resolve({ imgUrl: img, size: sizeInfo[1].size })
})
}
/**
* 上传图片
* @param {String} path 本地图片路径
* @param {String} which 上传到库的哪个文件夹
*/
const uploadFiles = function (path, which) {
return new Promise(async (resolve, reject) => {
let enStrings = storeData.UserInfo.enStrings
let uploadDomain = recoveUrl_upload
let res = await uni.uploadFile({
url: uploadDomain + api.UPLOADIMGPATH + which,
filePath: path,
name: "imgFile",
header: {
enStrings: enStrings,
idx: path,
}
})
console.log(res, '图片上传成功');
if (res[1].statusCode == 200) {
const data = JSON.parse(res[1].data)
resolve(data.Content)
}
})
}