前端 react 实现图片上传前压缩 缩率图
创始人
2024-11-04 19:34:42
0

目录

一、安装

二、编写工具类

三、获取压缩后的File对象


一、安装

npm install compressorjs 或 yarn add compressorjs

官方文档:compressorjs - npm (npmjs.com)

二、编写工具类

/**  * @author Dragon Wu  * @since 2024/8/4 12:23  * 图片压缩工具  */ import Compressor from 'compressorjs';  // 压缩图片方法 (中间件) export function compressor(file: File, defaultQuality: number = 0.6) {     // console.log('压缩前: ', (file.size / 1024 / 1024).toFixed(1), 'M');//控制台打印图片大小     const filesize: number = parseFloat((file.size / 1024 / 1024).toFixed(1));     let quality = defaultQuality;     if (filesize < 0.8) { //这里可以设置自己的压缩规则         quality = 1;     } else if (filesize < 1) {         quality = 0.8;     } else if (filesize < 1.5) {         quality = 0.7;     } else if (filesize < 2) {         quality = 0.5;     } else if (filesize < 3) {         quality = 0.33;     } else if (filesize < 4) {         quality = 0.25;     } else if (filesize < 5) {         quality = 0.2;     } else if (filesize < 8) {         quality = 0.125;     } else if (filesize < 10) {         quality = 0.1;     } else {         return new Promise((resolve, reject) => {             reject({                 msg: '图片不能超过10M'             })         });     }     // console.log('压缩比例: ', quality);      return new Promise((resolve) => {         new Compressor(file, {             quality: quality,             success(result: File | Blob) {                 // console.log('压缩后: ', (result.size / 1024 / 1024).toFixed(1), 'M');                 if (result instanceof Blob) {                     //@ts-ignore                     result = new File([result], "f" + (result?.name as string).slice(-8), {type: result.type})                 }                 resolve(result);             },             error(err) {                 // 压缩报错的话 返回原图片                 resolve(file);             },         });     }); }  

三、获取压缩后的File对象

const handleBeforeUpload = (file: FileType) => {         const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';         if (!isJpgOrPng) {             message.warning('只能上传JPG/PNG格式!').then();         }         const isLt2M = file.size / 1024 / 1024 < 10;         if (!isLt2M) {             message.warning('图片不得超过10MB!').then();         }          compressor(file).then(res => {             if (isJpgOrPng && isLt2M) {                 onChange(res)             }         })          return false;     }

四、测试效果

可以看到源图片已经被压缩了,这样处理后再提交至服务器就能节省带宽,提高前端加载效率了,注意质量数值设置的过小图片过大可能导致图片失帧。

总结到此!

相关内容

热门资讯

黑科技辅助!wepoke透明挂... 黑科技辅助!wepoke透明挂在哪买(透视)软件透明挂ai辅助器(一直真的是有挂)-哔哩哔哩,wep...
黑科技辅助!红龙扑克会作假(透... 黑科技辅助!红龙扑克会作假(透视)软件透明挂ai辅助工具(本来是真的有挂)-哔哩哔哩;最新版2026...
黑科技辅助!wepoke是有挂... 黑科技辅助!wepoke是有挂软件(透视)先前真的是有挂(有挂方式)-哔哩哔哩;1、完成wepoke...
黑科技辅助!红龙扑克辅助器第一... 黑科技辅助!红龙扑克辅助器第一视角(透视)软件透明挂ai辅助器(竟然存在有挂)-哔哩哔哩;黑科技辅助...
黑科技辅助!wepoke真的有... 黑科技辅助!wepoke真的有挂嘛(透视)都是存在有挂(有挂工具)-哔哩哔哩;是一款可以让一直输的玩...
黑科技辅助!德州ai辅助可以打... 黑科技辅助!德州ai辅助可以打(透视)软件透明挂ai辅助软件(素来有挂)-哔哩哔哩;1、让任何用户在...
黑科技辅助!智星菠萝德州辅助器... 黑科技辅助!智星菠萝德州辅助器(透视)原生真的有挂(详细教程)-哔哩哔哩是一款可以让一直输的玩家,快...
黑科技辅助!wpk透视辅助(透... 黑科技辅助!wpk透视辅助(透视)软件透明挂ai辅助安装(原来有挂)-哔哩哔哩;wpk透视辅助是一种...
黑科技辅助!poker外挂(透... 黑科技辅助!poker外挂(透视)素来真的是有挂(有挂详情)-哔哩哔哩;AI辅助机器人普及解说快速成...
黑科技辅助!pokerworl... 黑科技辅助!pokerworld软件(透视)软件透明挂ai辅助安装(竟然真的是有挂)-哔哩哔哩;1、...