AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

開箱即用的前端圖片壓縮方案

來源: 責編: 時間:2023-11-04 23:04:43 316觀看
導讀前端實現(xiàn)圖片壓縮的背景我們都知道在“寸土寸金”的互聯(lián)網(wǎng)時代, 速度是第一競爭力, 雖然我們的5G發(fā)展已經(jīng)搖搖領(lǐng)先, 但是也經(jīng)不住用戶在一個網(wǎng)頁里傳很多“巨無霸”圖片, 最終導致的結(jié)果就是頁面“龜速”打開......圖

前端實現(xiàn)圖片壓縮的背景

我們都知道在“寸土寸金”的互聯(lián)網(wǎng)時代, 速度是第一競爭力, 雖然我們的5G發(fā)展已經(jīng)搖搖領(lǐng)先, 但是也經(jīng)不住用戶在一個網(wǎng)頁里傳很多“巨無霸”圖片, 最終導致的結(jié)果就是頁面“龜速”打開......t2l28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片t2l28資訊網(wǎng)——每日最新資訊28at.com

那么作為技術(shù)人, 當然也有一堆的解決方案, 比如:t2l28資訊網(wǎng)——每日最新資訊28at.com

  • 壓縮圖片再上傳
  • 將圖片上傳到圖床, 利用圖床壓縮能力和CDN節(jié)點就近分發(fā)
  • 圖片流式加載
  • 圖片懶加載/ 預加載

當然聰明的小伙伴也會將上面的方案組合, 設(shè)計更優(yōu)秀的圖片“提速”方案.t2l28資訊網(wǎng)——每日最新資訊28at.com

今天不會和大家把所有方案都介紹一遍, 因為網(wǎng)上也有很多實踐, 接下來會從前端技術(shù)提升的角度, 分享一下如何用原生 javascript, 實現(xiàn)從圖片上傳到圖片自定義壓縮的完整方案. 大家可以把文章中介紹的方案直接用于自己的實際開發(fā)中, 或者基于它設(shè)計更棒的圖片壓縮方案.t2l28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片t2l28資訊網(wǎng)——每日最新資訊28at.com

實現(xiàn)圖片壓縮的方案

前端實現(xiàn)圖片壓縮無非就是在用戶上傳圖片文件后, 將file轉(zhuǎn)換成image對象, 然后再利用canvas 及其 api 將圖片壓縮成指定體積. 如下流程:t2l28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片t2l28資訊網(wǎng)——每日最新資訊28at.com

代碼實現(xiàn)

首先我們先實現(xiàn)將file轉(zhuǎn)換成image對象, 這里我們用到了FileReader API, 代碼如下:t2l28資訊網(wǎng)——每日最新資訊28at.com

// 壓縮前將file轉(zhuǎn)換成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 來設(shè)計生成圖片數(shù)據(jù)的方法, 接下來我們看看核心的圖片壓縮源碼:t2l28資訊網(wǎng)——每日最新資訊28at.com

/** * 壓縮圖片 * @param img 被壓縮的img對象 * @param type 壓縮后轉(zhuǎn)換的文件類型 * @param mx 觸發(fā)壓縮的圖片最大寬度限制 * @param mh 觸發(fā)壓縮的圖片最大高度限制 * @param quality 圖片質(zhì)量 */ 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設(shè)置參數(shù), 來實現(xiàn)自定義的圖片壓縮.t2l28資訊網(wǎng)——每日最新資訊28at.com

如果大家對代碼又不理解的地方, 也可以在文末發(fā)表問題, 我會做對應(yīng)的解答.t2l28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-16935-0.html開箱即用的前端圖片壓縮方案

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

下一篇: 超越基礎(chǔ):Flutter 中 onTap 事件的 5 條規(guī)則讓你脫穎而出

標簽:
  • 熱門焦點
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產(chǎn)品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發(fā)布會上看到了iQOO的首款平板產(chǎn)品iQOO Pad。雖
  • 一文看懂為蘋果Vision Pro開發(fā)應(yīng)用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現(xiàn)實(MR)頭戴設(shè)備。Vision Pro結(jié)合了虛擬現(xiàn)實(VR)和增強現(xiàn)實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 企業(yè)采用CRM系統(tǒng)的11個好處

    客戶關(guān)系管理(CRM)軟件可以為企業(yè)提供很多的好處,從客戶保留到提高生產(chǎn)力。  CRM軟件用于企業(yè)收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規(guī)模如今超過580
  • 得物效率前端微應(yīng)用推進過程與思考

    一、背景效率工程隨著業(yè)務(wù)的發(fā)展,組織規(guī)模的擴大,越來越多的企業(yè)開始意識到協(xié)作效率對于企業(yè)團隊的重要性,甚至是決定其在某個行業(yè)競爭中突圍的關(guān)鍵,是企業(yè)長久生存的根本。得物
  • 如何通過Python線程池實現(xiàn)異步編程?

    線程池的概念和基本原理線程池是一種并發(fā)處理機制,它可以在程序啟動時創(chuàng)建一組線程,并將它們置于等待任務(wù)的狀態(tài)。當任務(wù)到達時,線程池中的某個線程會被喚醒并執(zhí)行任務(wù),執(zhí)行完任
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬

    來源 | 電商在線文|易琬玉編輯|斯問受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、“Ringdoll戒之人形”淘寶店鋪有關(guān)外貌的評價,黃山已經(jīng)聽累了。生于1985年的他,哪
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業(yè)從業(yè)者、長三角一體化擁護者”的微博用戶 @長三角行健者 發(fā)文表示,據(jù)經(jīng)銷商集團反饋,小米汽車目前
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • 蘋果140W USB-C充電器:采用氮化鎵技術(shù)

    據(jù)10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
Top