前端 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;     }

四、测试效果

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

总结到此!

相关内容

热门资讯

八分钟了解!newpoker怎... 八分钟了解!newpoker怎么安装脚本,哈糖大菠萝能开挂吗,指南书教程(有挂分析)1、哈糖大菠萝能...
方案辅助!微信小程序微乐破解器... 方案辅助!微信小程序微乐破解器2024!解谜真的是有辅助教程(有挂细节)1、进入到微信小程序微乐破解...
第9分钟了解!德普之星有辅助软... 第9分钟了解!德普之星有辅助软件吗,德州局透视脚本,步骤教程(有挂神器)运德普之星有辅助软件吗辅助工...
窍要辅助!洞庭茶苑app辅助!... 窍要辅助!洞庭茶苑app辅助!关于存在有辅助神器(有挂辅助)1.洞庭茶苑app辅助 选牌创建新账号,...
七分钟了解!wepoker怎么... 七分钟了解!wepoker怎么开辅助,wepoker透视脚本免费app,绝活儿教程(有挂细节)1、w...
窍要辅助!嘟咪互动有挂吗!开挂... 窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有挂总结)窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有...
1分钟了解!wepoker辅助... 1分钟了解!wepoker辅助器最新版本更新内容,德普之星私人局辅助免费,办法教程(有挂辅助)wep...
大纲辅助!心悦海南苹果版辅助器... 大纲辅助!心悦海南苹果版辅助器!关于是有辅助工具(有挂攻略)1、玩家可以在心悦海南苹果版辅助器线上大...
指南辅助!小程序广东雀神智能插... 指南辅助!小程序广东雀神智能插件安装下载!解谜真的是有辅助技巧(新版有挂)运小程序广东雀神智能插件安...
第九分钟了解!wepoker作... 第九分钟了解!wepoker作弊辅助,wpk辅助购买,步骤教程(新版有挂)1、完成wepoker作弊...