欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2024年07月19日 11:04:06   作者:szx的開發(fā)筆記  
Compressor.js一個JavaScript圖像壓縮器,使用瀏覽器的原生canvas.toBlob API來執(zhí)行壓縮工作,這篇文章主要給大家介紹了關于前端使用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, {
      // 壓縮質量,0-1之間。數(shù)字越小,壓縮比越高
      quality: 0.2,
      success(result) {
        // 默認返回result是blob類型的文件,可以轉成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

下面是前后的圖片對比

原圖

壓縮后的圖

總結  

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

相關文章

  • JavaScript 繼承詳解(五)

    JavaScript 繼承詳解(五)

    在本章中,我們將分析John Resig關于JavaScript繼承的一個實現(xiàn) - Simple JavaScript Inheritance,需要的朋友可以參考下
    2016-10-10
  • JS中promise化微信小程序api

    JS中promise化微信小程序api

    這篇文章主要給大家通過代碼實例分析了promise化微信小程序api的使用方法,對此有需要的朋友可以參考學習下。
    2018-04-04
  • 瀏覽器的JavaScript引擎的識別方法

    瀏覽器的JavaScript引擎的識別方法

    識別瀏覽器的JavaScript引擎的方法對PC瀏覽器和移動瀏覽器都可用,其實實現(xiàn)原理就是下面的這段js,感興趣的朋友可以參考下
    2013-10-10
  • 如何在JavaScript中優(yōu)雅的提取循環(huán)內(nèi)數(shù)據(jù)詳解

    如何在JavaScript中優(yōu)雅的提取循環(huán)內(nèi)數(shù)據(jù)詳解

    這篇文章主要給大家介紹了關于如何在JavaScript中優(yōu)雅的提取循環(huán)內(nèi)數(shù)據(jù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • Bootstrap輸入框組件使用詳解

    Bootstrap輸入框組件使用詳解

    這篇文章主要為大家詳細介紹了Bootstrap輸入框組件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • js實現(xiàn)PC端和移動端刮卡效果

    js實現(xiàn)PC端和移動端刮卡效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)PC端和移動端刮卡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JS實現(xiàn)京東首頁之頁面頂部、Logo和搜索框功能

    JS實現(xiàn)京東首頁之頁面頂部、Logo和搜索框功能

    這篇文章主要實現(xiàn)京東的頁面頂部,logo和搜索框功能,本文有效果展示,頁面布局詳細分析,具體實現(xiàn)代碼,介紹的非常詳細,具有參考借鑒價值,需要的的朋友參考下吧
    2017-01-01
  • EasyUi中的Combogrid 實現(xiàn)分頁和動態(tài)搜索遠程數(shù)據(jù)

    EasyUi中的Combogrid 實現(xiàn)分頁和動態(tài)搜索遠程數(shù)據(jù)

    jquery easyui中的combogrid比較特殊,算是combo和grid的組合,combogrid結合一個可編輯的文本框和下拉數(shù)據(jù)網(wǎng)格面板,可以讓用戶迅速找到并選擇,又可以進行搜索,展示與當前輸入的字符相匹配的數(shù)據(jù)。下面給大家介紹EasyUi中的Combogrid 實現(xiàn)分頁和動態(tài)搜索遠程數(shù)據(jù)
    2016-04-04
  • 微信小程序實現(xiàn)時間預約功能

    微信小程序實現(xiàn)時間預約功能

    這篇文章主要為大家詳細介紹了微信小程序實現(xiàn)時間預約基本功能,一個類似電商的時間預約功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • JS使用tofixed與round處理數(shù)據(jù)四舍五入的區(qū)別

    JS使用tofixed與round處理數(shù)據(jù)四舍五入的區(qū)別

    js中一般使用tofixed與round處理數(shù)據(jù)四舍五入,那么tofixed與round有什么區(qū)別呢?下面小編給大家分享JS使用tofixed與round處理數(shù)據(jù)四舍五入的區(qū)別,需要的朋友參考下吧
    2017-10-10

最新評論