纯前端图片压缩神器 Compressor.js
点赞 关注 收藏 学会了本文简介现在大部分网站都会有图片不管这个图片是用来展示的还是需要上传到服务器的。但图片的体积往往比文字大会占用更多的服务器空间也会消耗用户更多的流量。所以在适当范围内压缩一下图片是很有必要的。今天介绍一款纯前端的图片压缩工具compressor.js。虽然这是一款有损的图片压缩工具但压缩质量还是挺不错的尤其是它可以在前端运行对于要上传图片到服务器的业务可以考虑一下用 compressor.js。你也可以用 Compressor.js 做个图片压缩的工具网站用户多了就开个百度或者谷歌的广告也能赚点奶茶钱。先体验一下 compressor.js 的效果https://fengyuanchen.github.io/compressorjs/这是 compressor.js 的代码仓库https://github.com/fengyuanchen/compressorjs动手试试安装 compressornpmnpm 通过这条命令安装。npm install compressorjs然后在需要使用到 compressor.js 的页面中引入。importCompressorfromcompressorjs;CDN如果你不使用打包工具也可以直接通过 CDN 在 HTML 中引入 Compressor.js。script srchttps://cdn.jsdelivr.net/npm/compressorjslatest/dist/compressor.min.js/script基础用法要使用 compressor.js 压缩图片首先通过new Compressor创建一个压缩实例并传入文件和一些配置参数。成功后会返回一个压缩后的图片对象。接下来我用一个小例子演示一下。这个例子通过上传一张图片然后使用 compressor 压缩它再返回一个下载链接。!-- 文件上传控件 --inputtypefileidfileInputacceptimage/*!-- 下载压缩后的图片 --dividdownloadLinkaiddownloadCompressedstyledisplay:none;download点击下载压缩后的图片/a/div!-- 引入 Compressor.js --scriptsrchttps://cdn.jsdelivr.net/npm/compressorjslatest/dist/compressor.min.js/scriptscript// 获取 file input 和下载链接元素constfileInputdocument.getElementById(fileInput)constdownloadCompresseddocument.getElementById(downloadCompressed)// 当文件选择发生变化时触发fileInput.addEventListener(change,function(event){constfileevent.target.files[0]// 获取上传的文件if(!file){return// 如果没有选择文件则不继续执行}// 使用 Compressor.js 压缩图片newCompressor(file,{success(result){downloadCompressed.hrefURL.createObjectURL(result)// 显示下载链接downloadCompressed.style.displayinline},error(err){console.error(压缩失败:,err)},})})/script在这个例子中使用了input typefile作为上传图片的元素获取到用户上传的图片后使用new Compressor(file[, options])来压缩图片new Compressor接收2个参数第一个参数是图片文件第二个参数是一系列参数在本例中的所有参数都使用了默认值。最后通过success()处理压缩成功后的操作用error()处理压缩失败后的操作。当压缩成功后就进入success(result)里了这里的result返回了压缩成功后的图片对象通过URL.createObjectURL(result)的方式将返回压缩成功后的图片地址。将该地址赋值到a标签里就能给用户手动点击下载了。挺简单吧配置压缩强度在前面的例子中我们通过new Compressor(file[, options])压缩图片但压缩的强度默认是 80%在压缩 JPG 时默认是 92%。如果你希望将图片体积压缩得更小画质会更差可以在options这个参数里配置一项quality。quality接收的值是01quality的数值越小压缩出来的图片体积就越小压缩力度就越大。具体用法// 省略部分代码newCompressor(file,{quality:0.6,// 设置压缩质量为 60%success(result){},// 压缩成功后执行这里的代码error(err){}// 压缩失败后执行这里的代码})设置下载文件的文件名在前面的例子中我们下载压缩成功后的图片文件名看上去是一堆乱码。比如我想将压缩后的图片名改成在原图的文件名后面拼上“-德育处主任”可以这么做。// 省略部分代码newCompressor(file,{quality:0.6,// 设置压缩质量为 60%success(result){// 获取文件名并给压缩后的文件加上 -德育处主任 后缀constoriginalNamefile.name;constextensionIndexoriginalName.lastIndexOf(.);constnameWithoutExtensionoriginalName.substring(0,extensionIndex);constextensionoriginalName.substring(extensionIndex);downloadCompressed.downloadnameWithoutExtension-德育处主任extension;downloadCompressed.hrefURL.createObjectURL(result)// 显示下载链接downloadCompressed.style.displayinline},error(err){console.error(压缩失败:,err)}})压缩网络图片compressor.js 的第一个参数必须是一个File对象通常是通过文件上传获取的它不支持直接传入网络图片的 URL。因为它需要操作的是一个本地的File或Blob对象而不是通过 URL 获取的资源。但我们可以先通过 JavaScript 将网络图片转换为一个File或Blob对象然后再将其传递给 compressor.js。我上传了一张图片到免费的图床上这是将我公众号的url转成艺术二维码的图片 https://i.imgur.com/zyurGlf_d.webp?maxwidth760fidelitygrandfunctionurlToBlob(url){returnfetch(url).then((response)response.blob()).then((blob){// Step 2: 将 Blob 传递给 Compressor.jsnewCompressor(blob,{quality:0.8,// 设置压缩质量success(result){console.log(压缩后的图片:,result)},error(err){console.error(压缩出错:,err)},})})}constimageUrlhttps://i.imgur.com/zyurGlf_d.webp?maxwidth760fidelitygrandurlToBlob(imageUrl)通过fetch读取这张图片然后将读取回来的图片执行.blob()方法将其转换成blob再丢给 compressor.js 压缩。纯前端用 compressor.js 压缩图片能省服务器空间和流量还能自定义压缩质量。落地时要考虑工程效率不妨看看RollCode 低代码平台的私有化部署、自定义组件、静态页面发布SSG SEO能力。以上就是本文的内容啦如果你想在线体验一下 compressor.js 的压缩能力可以试试这个网站 http://worklite.vip/点赞 关注 收藏 学会了

相关新闻

AI赋能网络小说创作:脑洞生成的实操指南与技巧

AI赋能网络小说创作:脑洞生成的实操指南与技巧

在网络小说创作领域,“脑洞”是作品的核心竞争力——无论是反转不断的剧情、打破常规的设定,还是极具记忆点的人物,都离不开新颖脑洞的支撑。随着AI技术的快速发展,越来越多的创作者开始借助AI工具突破灵感瓶颈,但多数…

2026/7/8 3:25:56 阅读更多 →
SFT对大语言模型的作用

SFT对大语言模型的作用

1. SFT的作用 如果没有 SFT(监督微调),你面对的不是一个“助手”,而是一个“复读机”或者“复印机”。 举个例子,假如你给一个仅经过预训练(Base Model)的模型发指令: 你的输入&…

2026/7/6 22:25:16 阅读更多 →
口碑推荐!天玑AIGEO优化系统该选哪家?

口碑推荐!天玑AIGEO优化系统该选哪家?

行业痛点分析 在当前天玑AIGEO优化系统领域,企业面临着诸多技术挑战。数据表明,部分企业在营销过程中,由于传统广告投放缺乏精准定位,导致无效投放成本占比超30%。本地企业更是面临重重困难,线下门店引流半径有限&…

2026/7/4 12:07:36 阅读更多 →

最新新闻

5步构建智能抢票系统:告别手动刷票的烦恼

5步构建智能抢票系统:告别手动刷票的烦恼

5步构建智能抢票系统:告别手动刷票的烦恼 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 还在为心仪演唱会的门票秒光而烦恼吗?还在为抢票时网络卡顿、…

2026/7/8 3:25:47 阅读更多 →
量化派:构建物理AI通用技术底座,开启“卖能力”产业拐点

量化派:构建物理AI通用技术底座,开启“卖能力”产业拐点

量化派探索物理世界生产力,引领物理AI新趋势大语言模型探索了数字世界的生产力,而物理AI正在重新探索物理世界的生产力。量化派不卖机器人本体,也不卖单一解决方案,而是售卖让机器人理解物理世界的通用能力层——物理世界基础模型…

2026/7/8 3:19:46 阅读更多 →
房地产顾问如何突破单一业务模式转型为家族资产配置顾问?

房地产顾问如何突破单一业务模式转型为家族资产配置顾问?

房产中介的传统业务模式高度依赖单套物业的成交。交易一完成,客户关系往往随之结束。当客户手里积累到第二套、第三套房产,开始考虑跨境持有、子女教育与婚姻资产保护时,单一经纪人的知识储备常常触及天花板。客户的问题从"买哪套房子&q…

2026/7/8 3:19:46 阅读更多 →
计网-如何理解冲突域和广播域

计网-如何理解冲突域和广播域

如何理解冲突域和广播域 1. 冲突域 (Collision Domain) 核心定义: 在一个网络中,如果两台设备同时发送数据会导致信号在物理介质上发生碰撞(冲突),那么这些设备就处于同一个冲突域。 通俗理解: 想象一条单车…

2026/7/8 3:17:45 阅读更多 →
不是接口调不通,而是链路没拆清:Dify RAG、向量引擎与 timeout 排查实战

不是接口调不通,而是链路没拆清:Dify RAG、向量引擎与 timeout 排查实战

很多人第一次把 Dify 接进业务系统时,问题通常会被问得很直接:Dify 用什么 API 接口? 如果只是跑通一个简单 Demo,这个问题并不复杂。聊天应用调用聊天消息接口,工作流应用调用工作流运行接口,知识库管理调…

2026/7/8 3:15:45 阅读更多 →
2026无线充赛道洗牌!Qi认证才是品牌合规底气与终端成交利器

2026无线充赛道洗牌!Qi认证才是品牌合规底气与终端成交利器

01 Qi认证,是无线充行业的硬性准入壁垒很多从业者误以为无线充入行门槛低、随便贴牌就能卖,实则不然。WPC无线充电联盟对Qi认证有着极其严苛的审核标准,绝非普通质检证书可比:✅ 品牌资质、工厂品控、生产线合规全方位审核&#x…

2026/7/8 3:11:44 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻