vue图片压缩上传

5 篇文章 0 订阅

前言

之前图片压缩是公司前辈留下的一个js方法,采用的回调函数处理。最近一个项目为了优化用户体验,在图片上传失败后要根据接口返回的状态值更改页面UI,此时该js方法就会出现异常,于是我找到了 image-conversion

安装

npm i image-conversion --save

或者

yarn add image-conversion

引入

import * as imageConversion from 'image-conversion'

或者

import {compress, compressAccurately} from 'image-conversion'

常用方法列表

compress

语法

compress(file, config){Promise(Blob)}

参数

名称类型描述
fileFile(Blob)一个File(Blob)对象
confignumber or object如果是数字类型,范围0-1,表示图像质量; 如果是对象类型,你可以传递参数给imagetoCanvas和dataURLtoFile方法;

举例

// number
imageConversion.compress(file,0.8)

// object
imageConversion.compress(file,{
  quality: 0.8,
  type: "image/jpeg",
  width: 300,
  height: 200,
  orientation:2,
  scale: 0.5,
})

返回值

返回一个包含Blob对象的Promise

compressAccurately

该方法可以精确修改图片的大小

语法

compressAccurately(file, config){Promise(Blob)}

参数

名称类型描述
fileFile(Blob)一个File(Blob)对象
confignumber or object如果是number类型,指定压缩图像的大小(单位KB); 如果是对象类型,你可以传递参数给imagetoCanvas和dataURLtoFile方法;

举例

// number
imageConversion.compressAccurately(file,100); // 压缩后的图像大小为100kb

// object
imageConversion.compressAccurately(file,{
  // 压缩后的图像大小为100kb
  size: 100,
  // 图像压缩尺寸的精度,范围0.8-0.99,默认为0.95; 
  // 这意味着如果图片大小设置为1000Kb,精度为0.9,则认为压缩结果为900Kb-1100Kb的图像是可接受的; 
  accuracy: 0.9,
  type: "image/jpeg",
  width: 300,
  height: 200,
  orientation:2,
  scale: 0.5,
})

返回值

返回一个包含Blob对象的Promise

此处只记录以上两个方法,有更多需求可跳转官方文档

实例

该项目为 Vue + Vant ,此处使用Uploader文件上传执行图片压缩并上传的操作

// template
<van-field name="本人照片" label="本人照片" required>
  <template #input>
    <van-uploader v-model="uploader" :max-count="1" :after-read="afterRead" />
  </template>
</van-field>

// script
import * as imageConversion from 'image-conversion'

// methods
async afterRead(file) {
  // 此时可以自行将文件上传至服务器
  console.log(file)
  file.status = 'uploading'
  file.message = '上传中...'
  // 将图片精确压缩到600kb
  const blob = await imageConversion.compressAccurately(file.file, 600)
  // Blob转FormData
  const formdata = new FormData()
  // append第三个参数为可选项,此处本项目接口需要
  formdata.append('file', blob, file.file.name)
  // 调用fileUpload接口
  const { code, data } = await fileUpload(formdata)
  // 此处code为接口定义状态码,本项目成功为0
  if (code === 0) {
    file.status = 'done'
    file.message = '上传成功'
    console.log(data)
  } else {
    file.status = 'failed'
    file.message = '上传失败'
  }
}
  • 13
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值