0


前端使用Compressor.js实现图片压缩上传

前端使用Compressor.js实现图片压缩上传

Compressor.js官方文档

安装

npminstall compressorjs

使用

在使用ElementUI或者其他UI框架的上传组件时,都会有上传之前的钩子函数,在这个函数中可以拿到原始file,这里我用VantUI的上传做演示

afterRead 函数是上传之前的钩子,可以获取到原始file

<template><div><van-uploader
      :max-count="prop.limit"
      v-model="state.fileList":after-read="afterRead":before-read="beforeRead"
      @delete="deleteFile"/></div></template><script setup>import{ reactive, defineEmits, defineProps, watch }from'vue'import{ FileUploadFun }from'@/api/index.js'import{ useCustomFieldValue }from'@vant/use'import{ Toast }from'vant'import Compressor from'compressorjs'const prop =defineProps({url:{type: String,default:'',},limit:{type: Number,default:5,},})const emit =defineEmits(['onSuccess'])const state =reactive({fileList:[],})watch(()=> prop.url,()=>{if(prop.url){
      state.fileList =[]
      prop.url.split(',').forEach((item)=>{
        state.fileList.push({url: item,})})}})// 文件上传之前对图片进行压缩constbeforeRead=(file)=>{returnnewPromise((resolve, reject)=>{newCompressor(file,{// 压缩质量,0-1之间。数字越小,压缩比越高quality:0.2,success(result){// 默认返回result是blob类型的文件,可以转成file并返回,交给afterRead钩子进行上传let newFile =newFile([result], file.name,{type: file.type })resolve(newFile)},error(err){reject(err)},})})}// 文件上传后触发constafterRead=(file)=>{
  file.status ='uploading'
  file.message ='上传中...'FileUploadFun(file.file).then((res)=>{
      file.status ='done'
      file.message ='上传成功'let urls = state.fileList.map((i)=> i.url)
      urls.pop()
      urls.push(res.data.url)// 通知外界上传成功emit('onSuccess', urls.join(','))}).catch(()=>{
      state.fileList.pop()
      file.status ='done'Toast('上传失败')})}// 文件删除后触发constdeleteFile=()=>{emit('onSuccess', state.fileList.map((i)=> i.url).join(','))}// 用于返回信息useCustomFieldValue(()=> state.fileList.map((item)=> item.url).join(','))</script>

示例
Quality原始大小压缩后大小压缩比Description02.12 MB114.61 KB94.72%-0.22.12 MB349.57 KB83.90%-0.42.12 MB517.10 KB76.18%-0.62.12 MB694.99 KB67.99%推荐0.82.12 MB1.14 MB46.41%推荐12.12 MB2.12 MB0%不推荐NaN2.12 MB2.01 MB5.02%-
测试效果

image-20240510141040120

可以看到压缩前的图片大小3.29M,压缩后343KB

在这里插入图片描述

下面是前后的图片对比

原图

测试img

压缩后的图

压缩后的测试img


本文转载自: https://blog.csdn.net/SongZhengxing_/article/details/138664328
版权归原作者 szx的开发笔记 所有, 如有侵权,请联系我们删除。

“前端使用Compressor.js实现图片压缩上传”的评论:

还没有评论