el-upload上传图片之前压缩图片

el-upload上传图片之前压缩图片

一、主要代码

<el-upload
     ref="upload1"
     class="avatar-uploader"
     :headers="headers"
     :action="actionUrl"
     :multiple="false"
     :limit="1"
     :show-file-list="false"
     :on-success="businessLicenseSuccess"
     :before-upload="
         file => {
             beforeAvatarUpload('license', file)
         }
     "
     :on-exceed="beforeExceed"
     :file-list="businessLicense"
     :data="data1Name"
 >
     <img
         style="width: 170px; height: 117px; border-radius: 10px"
         v-if="businessLicense.length > 0"
         :src="businessLicenseUrl"
         class="avatar"
     />
     <div class="bgBusiness" v-else>
         <!-- <i class="el-icon-plus avatar-uploader-icon"></i>
         <p>上传证件照</p> -->
     </div>
 </el-upload>

二、before-upload函数中

beforeAvatarUpload(file) {
      // jpg ===image/jpeg
      // png====image/png
      const isJPG = file.type === 'image/jpeg' || 'image/png'
      //  png 、jpg 、jpeg
      const isLt2M = file.size / 1024 > 100
      if (!isJPG) {
          this.$message.error('上传图片只能是jpg/jpeg/png格式!')
          return Promise.reject()
      }
      if (isLt2M) {
          return this.commonZipPic(file)
      }
  },      
// 图片通用压缩提示
commonZipPic(file) {
 const r = confirm(
     `您上传的图片大小约为${(file.size / 1024).toFixed(
         2
     )}Kb,是否进行压缩上传?(此操作会降低图片质量)`
 )
 // const r = true
 if (r == true) {
     const _this = this
     return new Promise((resolve, reject) => {
         const image = new Image()
         let resultBlob = ''
         image.src = URL.createObjectURL(file)
         image.onload = () => {
             // 调用方法获取blob格式,方法写在下边
             resultBlob = _this.compressUpload(image, file)
             const fs = new File([resultBlob], file.name, {
                 type: file.type,
             })
             if (fs.size / 1024 > 100) {
                 // this.commonZipPic(fs)
                 this.$message.warning('压缩后图片仍大于100kb,请您手动压缩')
                 reject()
             }
             resolve(fs)
         }
         image.onerror = () => {
             reject()
         }
     })
 } else {
     return Promise.reject()
 }
},
/* 图片压缩方法-canvas压缩 */
compressUpload(image, file) {
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')
    // const initSize = image.src.length
    const { width } = image
    const { height } = image
    canvas.width = width
    canvas.height = height
    ctx.fillRect(0, 0, canvas.width, canvas.height)
    ctx.drawImage(image, 0, 0, width / 10, height / 10)
    // 进行最小压缩0.1
    const compressData = canvas.toDataURL(file.type || 'image/jpeg', 0.1)
    // 压缩后调用方法进行base64转Blob,方法写在下边
    const blobImg = this.dataURItoBlob(compressData)
    return blobImg
},     
/* base64转Blob对象 */
   dataURItoBlob(data) {
       let byteString
       if (data.split(',')[0].indexOf('base64') >= 0) {
           byteString = atob(data.split(',')[1])
       } else {
           byteString = unescape(data.split(',')[1])
       }
       const mimeString = data.split(',')[0].split(':')[1].split(';')[0]
       const ia = new Uint8Array(byteString.length)
       for (let i = 0; i < byteString.length; i += 1) {
           ia[i] = byteString.charCodeAt(i)
       }
       return new Blob([ia], { type: mimeString })
   },

链接: https://blog.csdn.net/weixin_44134899/article/details/95046994

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值