vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue compressor.js文件压缩

Vue与compressor.js实现高效文件压缩的方法

作者:水星记_

本文将介绍基于 Vue 框架和 compressor.js 的上传时文件压缩实现方法,通过在上传过程中对文件进行压缩,减小文件大小,提升上传速度,为用户创造更快捷、高效的上传体验,感兴趣的朋友跟随小编一起看看吧

前言

上传文件是一个常见的需求,并且文件大小往往成为限制因素之一。为了提升用户体验和节省带宽消耗,上传时的文件压缩便显得格外重要。本文将介绍基于 Vue 框架和 compressor.js 的上传时文件压缩实现方法,通过在上传过程中对文件进行压缩,减小文件大小,提升上传速度,为用户创造更快捷、高效的上传体验。

安装

npm install image-compressor.js
yarn add image-compressor.js

compressor.js 常用的属性

属性描述
quality设置压缩图像的质量。值范围为0到1之间,其中0表示最低质量,1表示最高质量。
width指定压缩图像的目标宽度。可以使用像素或百分比来表示。
height指定压缩图像的目标高度。可以使用像素或百分比来表示。
minWidth限制压缩后的图像宽度的最小值。如果图像的宽度小于此值,将不会进行压缩。
minHeight限制压缩后的图像高度的最小值。如果图像的高度小于此值,将不会进行压缩。
maxWidth限制压缩后的图像宽度的最大值。如果图像的宽度超过此值,将会按比例缩小。
maxHeight限制压缩后的图像高度的最大值。如果图像的高度超过此值,将会按比例缩小。
convertSize确定是否在压缩时调整图像的大小。如果设置为true,将根据目标宽度和高度自动调整图像大小。
checkOrientation检查图像的方向信息,并根据需要进行自动旋转。

这些是 compressorjs 插件的一些常见属性,用于控制图像的压缩质量、尺寸和方向。你可以根据实际需求设置这些属性以获得想要的压缩效果。更多详细信息和属性,请参阅插件的官方文档

封装文件

import ImageCompressor from 'image-compressor.js';
export default function compressFile(file) {
  return new Promise((resolve, reject) => {
    const options = {
      success(result) {
        // 将压缩后的 Blob 转换为 File 对象(如果组件支持Blob则不用这一步)
        const compressedFile = new File([result], file.name, {
          type: file.type,
          lastModified: Date.now(),
        });
        resolve(compressedFile);
      },
      error(e) {
        reject(e);
      },
    };
    if (file.size > 5 * 1024 * 1024) {
      options.quality = 0.6; // 压缩质量
      options.convertSize = false;//不进行图像尺寸的调整
      options.checkOrientation = false; // 图片翻转,默认为false
    }
    new ImageCompressor(file, options);
  });
}

main.js

// 全局挂载
import compressFile from '@/utils/compressFile';
Vue.prototype.$compressFile = compressFile;

使用文件

<template>
  <div>
    <van-field label="照片">
      <template #input>
        <van-uploader :after-read="(file, detail) => clzpAfterRead(file, detail, 'xszzp')" v-model="cszp" :max-count="1" accept="image/*" />
      </template>
    </van-field>
  </div>
</template>
<script>
import { uploadFile } from "@/api/publicApi";
export default {
  data() {
    return {
      cszp: "",
    };
  },
  mounted() {},
  methods: {
    async clzpAfterRead(file, detail, name) {
      console.log(file.file.size, "未压缩大小");
      // 调用压缩图片的方法 this.$compressFile
      const compressedFile = await this.$compressFile(file.file);
      console.log(compressedFile.size, "压缩后大小");
      let formData = new FormData();
      formData.append("file", compressedFile);
      uploadFile(formData).then((res) => {
        // 执行操作
      });
    },
  },
};
</script>

实现过程

总结起来,这段代码的实现思路是:通过 van-uploader 组件实现图片上传功能,在上传成功后调用 clzpAfterRead 方法,将上传的图片文件通过 image-compressor.js 库进行压缩,并将压缩后的文件再次上传到服务器。整个过程使用了 Vue 框架以及 Promise 对象来处理异步操作,以实现图片上传时压缩大小的功能。

实现效果

到此这篇关于Vue与compressor.js实现高效文件压缩的文章就介绍到这了,更多相关Vue compressor.js文件压缩内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文