Element-ui 上传图片前压缩图片

上传前把图片大小进行一个压缩在进行上传。

文章目录


前言

需求:项目当中上传图片的需求点肯定有很多,再上传之后,如果图片很大的话,在加载的时候就会很慢。最近发现系统首次加载越来越慢,就开始思考怎么能降低这个加载时间,由于首页图片很多,所以图片的大小就需要进行处理,本文记录了上传图片之前压缩图片的各种方法。


一、插件image-conversion

1. 安装依赖:

npm i image-conversion

2.页面当中引入:

import * as imageConversion from 'image-conversion'

3.使用:

//把图片文件作为参数传递到方法中

// 上传之前的钩子函数
    beforeUpload(file) {

        // 判断是图片
      const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
      if (!isJpgOrPng) {
        console.log('上传头像图片只能是 JPG 或 PNG 格式!');
        return false;
      }
      return new Promise((resolve) => {
        // 压缩到100KB,这里的100就是要压缩的大小,可自定义
        imageConversion.compressAccurately(file, 100).then(res => {
          console.log(res)
          resolve(res);
        });
      })
    }

二、canvas

1.上传组件方法:

代码如下(示例):

methods: {

    // 文件上传成功

    uploadSuccess(res) {

      if (res.code === 200) {

        this.imgs.push({ name: res.data, url: this.$fileUrl_ + '/' + res.data, path: res.data })

      else {

        console.error('文件上传失败', res.msg)

      }

    },

// 上传文件之前

    beforeAvatarUpload(file) {

        // 图片大小大于2M进行图片压缩

      if (file.size / 1024 / 1024 > 2) {

        const that = this

        return new Promise(resolve => {

          const reader = new FileReader()

          const image = new Image()

          image.onload = (imageEvent) => {

            const canvas = document.createElement('canvas'// 创建画布

            const context = canvas.getContext('2d')         // 画布为2d

            const width = image.width * that.quality        // 图片宽度 * 压缩比例

            const height = image.height * that.quality      // 图片高度 * 压缩比例

            canvas.width = width                            // 画布宽度

            canvas.height = height                          // 画布宽度

            context.clearRect(0, 0, width, height)

            context.drawImage(image, 0, 0, width, height)

            const dataUrl = canvas.toDataURL(file.type)     //图片转路径

            const blobData = that.dataURLtoBlob(dataUrl, file.type) //图片转二进制

            resolve(blobData)

          }

          reader.onload = e => { image.src = e.target.result }

          reader.readAsDataURL(file)

        })

      else {

        return true

      }

    },

   

//图片转二进制

    dataURLtoBlob(dataURL, type) {

      var binary = atob(dataURI.split(',')[1])

      var array = []

      for (var i = 0; i < binary.length; i++) {

        array.push(binary.charCodeAt(i))

      }

      return new Blob([new Uint8Array(array)], { type: type })

    },

    // 图片移除

    handleRemove(file, fileList) {

      const arr = []

      fileList.forEach(r => {

        arr.push(r.response.data)

      })

      this.imgs = arr

    },

    // 图片预览

    handlePictureCardPreview(file) {

      this.dialogImageUrl = file.url

      this.dialogVisible = true

    },

}


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ElementUI 是一个基于 Vue.js 的组件库,它提供了一些常用的 UI 组件,包括上组件。要使用 ElementUI 的上组件,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了 Vue.js 和 ElementUI。你可以通过 npm 或 yarn 进行安装。 2. 在你的项目中引入 ElementUI 的样式和组件。你可以在你的主文件(通常是 main.js 或 main.ts)中添加以下代码: ```javascript import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 3. 在你需要使用上组件的地方,可以像使用其他 ElementUI 组件一样,直接在模板中引入上组件。例如: ```html <template> <el-upload class="upload-demo" action="/your-upload-api" :on-success="handleSuccess" :before-upload="beforeUpload" > <el-button size="small" type="primary">点击上</el-button> <div slot="tip" class="el-upload__tip">只能上jpg/png文件,且不超过2MB</div> </el-upload> </template> <script> export default { methods: { handleSuccess(response, file, fileList) { // 上成功的处理逻辑 }, beforeUpload(file) { // 上的处理逻辑 } } } </script> <style scoped> .upload-demo { border: 1px dashed #409EFF; border-radius: 6px; padding: 20px; text-align: center; } </style> ``` 这样,你就可以在你的 Vue.js 项目中使用 ElementUI 的上组件了。记得根据你的实际需求,修改上组件的参数和处理逻辑。希望对你有所帮助!如果你还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值