当前位置:首页 > 科技  > 软件

开箱即用的前端图片压缩方案

来源: 责编: 时间:2023-11-04 23:04:43 368观看
导读前端实现图片压缩的背景我们都知道在“寸土寸金”的互联网时代, 速度是第一竞争力, 虽然我们的5G发展已经摇摇领先, 但是也经不住用户在一个网页里传很多“巨无霸”图片, 最终导致的结果就是页面“龟速”打开......图

前端实现图片压缩的背景

我们都知道在“寸土寸金”的互联网时代, 速度是第一竞争力, 虽然我们的5G发展已经摇摇领先, 但是也经不住用户在一个网页里传很多“巨无霸”图片, 最终导致的结果就是页面“龟速”打开......7Qt28资讯网——每日最新资讯28at.com

图片图片7Qt28资讯网——每日最新资讯28at.com

那么作为技术人, 当然也有一堆的解决方案, 比如:7Qt28资讯网——每日最新资讯28at.com

  • 压缩图片再上传
  • 将图片上传到图床, 利用图床压缩能力和CDN节点就近分发
  • 图片流式加载
  • 图片懒加载/ 预加载

当然聪明的小伙伴也会将上面的方案组合, 设计更优秀的图片“提速”方案.7Qt28资讯网——每日最新资讯28at.com

今天不会和大家把所有方案都介绍一遍, 因为网上也有很多实践, 接下来会从前端技术提升的角度, 分享一下如何用原生 javascript, 实现从图片上传到图片自定义压缩的完整方案. 大家可以把文章中介绍的方案直接用于自己的实际开发中, 或者基于它设计更棒的图片压缩方案.7Qt28资讯网——每日最新资讯28at.com

图片图片7Qt28资讯网——每日最新资讯28at.com

实现图片压缩的方案

前端实现图片压缩无非就是在用户上传图片文件后, 将file转换成image对象, 然后再利用canvas 及其 api 将图片压缩成指定体积. 如下流程:7Qt28资讯网——每日最新资讯28at.com

图片图片7Qt28资讯网——每日最新资讯28at.com

代码实现

首先我们先实现将file转换成image对象, 这里我们用到了FileReader API, 代码如下:7Qt28资讯网——每日最新资讯28at.com

// 压缩前将file转换成img对象function readImg(file:File) {    return new Promise((resolve, reject) => {     const img = new Image()     const reader = new FileReader()     reader.onload = function(e:any) {      img.src = e.target.result     }     reader.onerror = function(e) {      reject(e)     }     reader.readAsDataURL(file)     img.onload = function() {      resolve(img)     }     img.onerror = function(e) {      reject(e)     }    })}

这里使用 promise 来设计生成图片数据的方法, 接下来我们看看核心的图片压缩源码:7Qt28资讯网——每日最新资讯28at.com

/** * 压缩图片 * @param img 被压缩的img对象 * @param type 压缩后转换的文件类型 * @param mx 触发压缩的图片最大宽度限制 * @param mh 触发压缩的图片最大高度限制 * @param quality 图片质量 */ function compressImg(img: any, type:string, mx: number, mh: number, quality:number = 1) {    return new Promise((resolve, reject) => {     const canvas = document.createElement('canvas')     const context = canvas.getContext('2d')     const { width: originWidth, height: originHeight } = img     // 最大尺寸限制     const maxWidth = mx     const maxHeight = mh     // 目标尺寸     let targetWidth = originWidth     let targetHeight = originHeight     if (originWidth > maxWidth || originHeight > maxHeight) {      if (originWidth / originHeight > 1) {       // 宽图片       targetWidth = maxWidth       targetHeight = Math.round(maxWidth * (originHeight / originWidth))      } else {       // 高图片       targetHeight = maxHeight       targetWidth = Math.round(maxHeight * (originWidth / originHeight))      }     }     canvas.width = targetWidth     canvas.height = targetHeight     context?.clearRect(0, 0, targetWidth, targetHeight)     // 图片绘制     context?.drawImage(img, 0, 0, targetWidth, targetHeight)     canvas.toBlob(function(blob) {      resolve(blob)     }, type || 'image/png', quality)     })}

这里通过控制 canvas的宽高, 以及对 canvas 的 toBlob设置参数, 来实现自定义的图片压缩.7Qt28资讯网——每日最新资讯28at.com

如果大家对代码又不理解的地方, 也可以在文末发表问题, 我会做对应的解答.7Qt28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16935-0.html开箱即用的前端图片压缩方案

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Gorm进行CRUD操作指南

下一篇: 超越基础:Flutter 中 onTap 事件的 5 条规则让你脱颖而出

标签:
  • 热门焦点
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾“低价”口号。而过去与他们错位竞争的拼多多,靠
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top