【vue】图片压缩上传

 一、需求说明

在上传之前,把选中的图片压缩到100KB以内。

二、解决方法

使用 image-conversion 图片压缩插件

1、安装

yarn add image-conversion

2、引入

import * as imageConversion from 'image-conversion'

3、使用

// 将图片压缩至100KB以内(100即100KB)
imageConversion.compressAccurately(file, 100).then(async res => {
    res = new File([res], file.name, {
        type: res.type,
        lastModified: Date.now()
    });
    // 这个 res 就是压缩后的图片
});


// 错误写法:会造成压缩后图片格式丢失
// const blob = await imageConversion.compressAccurately(file, 100);

 ps:

插件官方文档地址 image-conversion - npm

三、详细代码 

    /**
     * @description: 上传钩子
     * @param {object} file 文件
     * @return {*}
     */
    const beforeUploadFile = async file => {
      modalData.file = "";
      // 文件后缀
      const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
      let whiteList = ["png", "jpg"];
      // 限制上传文件类型
      if (whiteList.indexOf(fileSuffix) === -1) {
        message.warning("上传文件格式不正确");
      } else {
        let formData = new FormData();
        // 如果图片大于100kb,则压缩后再上传
        if (file.size / 1024 > 100) {
          // 压缩图片至100KB以内
          imageConversion.compressAccurately(file, 100).then(async res => {
            res = new File([res], file.name, {
              type: res.type,
              lastModified: Date.now()
            });
            modalData.file = res;
            formData.append("file", modalData.fileList);
            formData.append("id", picInfo.id);
            await uploadFiles(formData);
          });
        } else {
          modalData.file = file;
          formData.append("file", modalData.fileList);
          formData.append("id", picInfo.id);
          await uploadFiles(formData);
        }
      }

      return false;
    };

四、参考链接

vue3+vant3 图片压缩上传_compressaccurately-CSDN博客

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中实现图片压缩上传的方法如下: 1.引入插件:首先需要引入一个图片压缩上传的插件,例如`vue-image-compressor`。 2.安装插件:使用npm或yarn安装插件,命令如下: ``` npm install vue-image-compressor ``` 或 ``` yarn add vue-image-compressor ``` 3.导入插件:在需要使用的组件中导入插件,并注册到Vue实例中,示例代码如下: ```javascript import Vue from 'vue' import VueImageCompressor from 'vue-image-compressor' Vue.use(VueImageCompressor) ``` 4.编写模板代码:在组件模板中添加一个文件上传按钮,并绑定一个`@change`事件来处理文件选择,示例代码如下: ```html <template> <div> <input type="file" @change="handleFileUpload" /> </div> </template> ``` 5.编写处理方法:在组件的`methods`选项中编写处理文件上传的方法,首先获取选择的文件,然后使用插件提供的压缩方法进行压缩,最后使用压缩后的图片进行上传,示例代码如下: ```javascript methods: { handleFileUpload(event) { const file = event.target.files[0] this.$compressImage(file, { quality: 0.6, // 压缩质量,范围为0到1(可选,默认为0.6) maxWidth: 800, // 最大宽度(可选,默认为800) maxHeight: 800 // 最大高度(可选,默认为800) }) .then(compressedImage => { // 进行图片上传逻辑 }) .catch(error => { // 处理压缩失败的情况 }) } } ``` 在上述代码中,通过`this.$compressImage`来调用插件提供的压缩方法,传入的参数为选择的文件和一些可选的压缩参数。压缩成功后,会返回一个压缩后的图片,可以将其直接上传到服务器,或者进行其他的操作。 通过以上步骤,在Vue中实现了图片压缩上传的功能。注意,使用插件的具体使用方法可能会根据插件的不同而有所不同,请根据实际情况进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值