最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端使用Compressor.js實現(xiàn)圖片壓縮上傳的詳細過程

 更新時間:2024年07月19日 11:04:06   作者:szx的開發(fā)筆記  
Compressor.js一個JavaScript圖像壓縮器,使用瀏覽器的原生canvas.toBlob API來執(zhí)行壓縮工作,這篇文章主要給大家介紹了關(guān)于前端使用Compressor.js實現(xiàn)圖片壓縮上傳的詳細過程,需要的朋友可以參考下

Compressor.js官方文檔

安裝

npm install compressorjs

使用

在使用ElementUI或者其他UI框架的上傳組件時,都會有上傳之前的鉤子函數(shù),在這個函數(shù)中可以拿到原始file,這里我用VantUI的上傳做演示

afterRead 函數(shù)是上傳之前的鉤子,可以獲取到原始file

<template>
  <div>
    <van-uploader
      :max-count="prop.limit"
      v-model="state.fileList"
      :after-read="afterRead"
      :before-read="beforeRead"
      @delete="deleteFile"
    />
  </div>
</template>
<script setup>
import { reactive, defineEmits, defineProps, watch } from 'vue'
import { FileUploadFun } from '@/api/index.js'
import { useCustomFieldValue } from '@vant/use'
import { Toast } from 'vant'
import Compressor from 'compressorjs'

const prop = defineProps({
  url: {
    type: String,
    default: '',
  },
  limit: {
    type: Number,
    default: 5,
  },
})
const emit = defineEmits(['onSuccess'])
const state = reactive({
  fileList: [],
})

watch(
  () => prop.url,
  () => {
    if (prop.url) {
      state.fileList = []
      prop.url.split(',').forEach((item) => {
        state.fileList.push({
          url: item,
        })
      })
    }
  }
)

// 文件上傳之前對圖片進行壓縮
const beforeRead = (file) => {
  return new Promise((resolve, reject) => {
    new Compressor(file, {
      // 壓縮質(zhì)量,0-1之間。數(shù)字越小,壓縮比越高
      quality: 0.2,
      success(result) {
        // 默認返回result是blob類型的文件,可以轉(zhuǎn)成file并返回,交給afterRead鉤子進行上傳
        let newFile = new File([result], file.name, { type: file.type })
        resolve(newFile)
      },
      error(err) {
        reject(err)
      },
    })
  })
}

// 文件上傳后觸發(fā)
const afterRead = (file) => {
  file.status = 'uploading'
  file.message = '上傳中...'

  FileUploadFun(file.file)
    .then((res) => {
      file.status = 'done'
      file.message = '上傳成功'
      let urls = state.fileList.map((i) => i.url)
      urls.pop()
      urls.push(res.data.url)
      // 通知外界上傳成功
      emit('onSuccess', urls.join(','))
    })
    .catch(() => {
      state.fileList.pop()
      file.status = 'done'
      Toast('上傳失敗')
    })
}

// 文件刪除后觸發(fā)
const deleteFile = () => {
  emit('onSuccess', state.fileList.map((i) => i.url).join(','))
}

// 用于返回信息
useCustomFieldValue(() => state.fileList.map((item) => item.url).join(','))
</script>

示例

Quality原始大小壓縮后大小壓縮比Description
02.12 MB114.61 KB94.72%-
0.22.12 MB349.57 KB83.90%-
0.42.12 MB517.10 KB76.18%-
0.62.12 MB694.99 KB67.99%推薦
0.82.12 MB1.14 MB46.41%推薦
12.12 MB2.12 MB0%不推薦
NaN2.12 MB2.01 MB5.02%-

測試效果

可以看到壓縮前的圖片大小3.29M,壓縮后343KB

下面是前后的圖片對比

原圖

壓縮后的圖

總結(jié)  

到此這篇關(guān)于前端使用Compressor.js實現(xiàn)圖片壓縮上傳的文章就介紹到這了,更多相關(guān)前端Compressor.js圖片壓縮上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用js動態(tài)添加html元素,以及屬性的簡單實例

    用js動態(tài)添加html元素,以及屬性的簡單實例

    下面小編就為大家?guī)硪黄胘s動態(tài)添加html元素,以及屬性的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JavaScript實現(xiàn)為指定對象添加多個事件處理程序的方法

    JavaScript實現(xiàn)為指定對象添加多個事件處理程序的方法

    這篇文章主要介紹了JavaScript實現(xiàn)為指定對象添加多個事件處理程序的方法,可實現(xiàn)讓指定對象處理多個事件的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Jupyter Notebook運行JavaScript的方法

    Jupyter Notebook運行JavaScript的方法

    Jupyter Notebook是一塊所見即所得的畫布,通過在瀏覽器上編輯代碼,讓開發(fā)人員實現(xiàn)展示與快速迭代的利器,本文主要介紹了Jupyter Notebook運行JavaScript的方法,感興趣的可以了解一下
    2021-05-05
  • JS動態(tài)加載腳本并執(zhí)行回調(diào)操作

    JS動態(tài)加載腳本并執(zhí)行回調(diào)操作

    這篇文章主要為大家詳細介紹了JS動態(tài)加載腳本并下載完成后執(zhí)行回調(diào)操作,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 使用JavaScript + HTML實現(xiàn)表格滾動效果

    使用JavaScript + HTML實現(xiàn)表格滾動效果

    本文介紹了如何使用HTML、CSS和JavaScript實現(xiàn)表格滾動效果,特別是在大屏展示或排行榜場景中,通過平滑滾動動畫,提升信息展示效率,支持數(shù)據(jù)動態(tài)更新和播放暫??刂?使用戶能夠高效瀏覽大量數(shù)據(jù),需要的朋友可以參考下
    2026-04-04
  • 原生js實現(xiàn)吸頂效果

    原生js實現(xiàn)吸頂效果

    本文主要介紹了原生js實現(xiàn)吸頂效果的示例。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • javascript 一段代碼引發(fā)的思考

    javascript 一段代碼引發(fā)的思考

    寫在前面:這是一個關(guān)于Ext, Prototype, JavaScript方面的問題,其實下面遇到的問題本不是問題,都是因為錯誤的理解造成的,本文的宗旨是希望讀者朋友避免我犯的同類錯誤,遇事三思而后行,同時也體會下發(fā)現(xiàn)問題,解決問題,反思問題這種精神活動所帶來的快樂!
    2009-01-01
  • javascript實現(xiàn)上傳圖片并預(yù)覽的效果實現(xiàn)代碼

    javascript實現(xiàn)上傳圖片并預(yù)覽的效果實現(xiàn)代碼

    圖片上傳預(yù)覽,就是在使用文件選擇框選擇了文件之后就可以在頁面上看見圖片的效果,關(guān)于這個效果我一直認為是無法做到的
    2011-04-04
  • axios params 和 data 的區(qū)別小結(jié)

    axios params 和 data 的區(qū)別小結(jié)

    本文介紹了在前端開發(fā)中使用Axios發(fā)送HTTP請求時,params和data的區(qū)別及其應(yīng)用場景,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 使用webpack-dev-server處理跨域請求的方法

    使用webpack-dev-server處理跨域請求的方法

    本篇文章主要介紹了使用webpack-dev-server處理跨域請求的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論

彩票| 西乌| 内黄县| 交城县| 如东县| 山东| 昭平县| 霍林郭勒市| 西贡区| 永泰县| 东方市| 衡山县| 武乡县| 博野县| 贞丰县| 叙永县| 瑞丽市| 岳普湖县| 镇沅| 时尚| 丁青县| 淮南市| 阳原县| 页游| 南昌市| 阳曲县| 都昌县| 宜宾市| 喀喇沁旗| 平湖市| 翁源县| 牟定县| 任丘市| 华蓥市| 永福县| 和顺县| 皮山县| 方山县| 成都市| 托克托县| 桦甸市|