uniapp压缩图片

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

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)
    }
  })
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容